万码IY9FEO6U
mac 上用homebrew安装完mysql后,怎样使用密码连接数据库
可能的问题有好几个:
先确定mysql服务有没有启动,可以用 ps au | grep mysql 看看有无mysql的进程,如果没有,可以用 sudo mysqld_safe 启动。
刚装完的mysql的是没有密码的, 直接在命令行输入 mysql 就可以进入到mysql交互模式。
设置密码:mysqladmin -u root password "newpassword"
或者换个方法,使用某个mysql的GUI管理工具登录试试,当然,通过GUI也是可以设置密码的,osx下推荐Sequel Pro这个软件,或者使用mysql官方的 mysqlbench
万码IY9FEO6U
举例说明声明式语法和指令式语法?
声明式:
function Component({ name }: { name: string }) {
const [count, setCount] = useState(0)
return
{name} {count}
setCount(c => c + 1)} >+1
}
命令式:
function Component({ name }: { name: string }) {
let count = 0;
const div = document.createElement("div"),
p = document.createElement("p"),
button = document.createElement("button"),
update = () => (p.innerText = `${name} ${count}`);
update();
button.innerText = "+1";
button.addEventListener("click", () => {
count++;
update();
});
div.append(p, button);
return div;
}
万码IY9FEO6U
mac下输入一个命令能补全但是是下划线开头是什么意思?
你用的是zsh吧,zsh自动补全的时候会把没有安装的以"_"开头,提示你安装。
万码IY9FEO6U
macos 上这段程序应该链接什么库
g++ ./example.cpp -o exam -framework CoreServices
万码IY9FEO6U
mac终端crontab定时执行python文件没成功?
排查路径以及权限(看你提供的貌似没问题)。
检查cron的日志,mac下不知道你这个cron日志在哪,linux可以用journalctl -u cron程序名字(cron实现又多种,比如cronie,crond,mac不清楚...)查看到cron执行记录。
确保py能执行,你的anaconda激活命令是写到.bashrc/.zshrc里面的吧,可能cron执行python时没激活呢,比如你py里面导入了其他什么包之类的,它要依赖python的相关环境变量。总之检查下cron日志就明白了。
万码IY9FEO6U
c语言EXC_BAD_ACCESS (code=2, address=0x102a3bf74)
两个问题
char* str = "abc"; -> char str[] = {'a','b','c',0};
cur++ -> cur+1
万码IY9FEO6U
g++ 编译 C++ 错误 /usr/bin/locale: source file is not valid UTF-8
it is CPLUS_INCLUDE_PATH environment variables error.
Setting export CPLUS_INCLUDE_PATH=":/usr/local/include"
CPLUS_INCLUDE_PATH 环境变量设置问题
配置 export CPLUS_INCLUDE_PATH=":/usr/local/include"
万码IY9FEO6U
Mac OS上 Iterm2显示路径问题
先确定你是用的 shell 类型,运行echo $SHELL
如果你使用的是 zsh,那么修改 /etc/zshrc
其中有一行设置 PS1的值的,修改为
PS1="%n@%m %1~ %# "
其它的 zsh 中转义变量
%T 系统时间(时:分)
%* 系统时间(时:分:秒)
%D 系统日期(年-月-日)
%n 你的用户名
%B - %b 开始到结束使用粗体打印
%U - %u 开始到结束使用下划线打印
%d 你目前的工作目录
%~ 你目前的工作目录相对于~的相对路径(可能在某些zsh版本可能造成乱码)
%M 计算机的主机名
%m 计算机的主机名(在第一个句号之前截断)
%l 你当前的tty
然后运行 source /etc/zshrc,或重启后生效
如果你使用的是 bash
那么修改 /etc/bashrc
同样的,有一行设置 PS1的值,修改为
PS1='\u@\h \w \$'
bash 中的转义变量
\H: #完整的主机名称。
\h: #仅取主机的第一个名字,到“.”结束
\u: #当前用户的用户名
\w: #完整的工作目录名称。宿主目录(如/hom/peter)会以~代替
\W: #利用basename取得工作目录名称,所以只会列出最后一个目录
\$: #提示字符,如果是root时,提示符为:#,普通用户则为:$
\#: #显示命令的编号(如30,31...)
\t: 显示时间为24小时格式,如:HH:MM:SS
\T: #显示时间为12小时格式
\A: #显示时间为24小时格式: HH:MM
\d: #代表日期,格式为weekday month date, 例如:"Tue May 26"
\v: #bash的版本信息
然后运行 source /etc/bashrc,或重启后生效
万码IY9FEO6U
在MacOS系统下找不到动态命名空间,在windows系统下却运行没问题?
windows 和mac os、linux的目录分隔符不一样,widnows是\和/都可以,而mac只能是/,所以你用命名空间里的\来当目录分隔符是不行的。
万码IY9FEO6U
Mac 启动go run main.go 总是弹出警告
解决方案很简单的,启动的时候不要":8080" 而是写 "127.0.0.1:8080" 就不会弹出这个
万码IY9FEO6U
laradocker niginx配置问题
location ~ \.php$ {
# try_files $uri /index.php =404;
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
}
location /admin.php {
fastcgi_pass php-upstream;
fastcgi_param SCRIPT_FILENAME /var/www/your_directionary/admin.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}``` language
万码IY9FEO6U
n切换node版本无效,已更改.bash_profile 文件下的路径,仍然无效
很明显是你 N_PREFIX 配置的有问题,它指向了 node 的可执行文件位置,而并不是 node 存在的目录名,解决方法:
第一种,修改 N_PREFIX 为 /usr/local,
第二种,删除 N_PREFIX,直接用 export PATH=/usr/local/bin:$PATH
第三种,最合理的应该是删除你在用户目录中的 node 安装目录,最简单的是直接删除 ~/.volta/bin/node (单独删除这一个文件可能会有不一致问题)
万码IY9FEO6U
libxml2 安装报错
直接编译我不熟,建议试试 homebrew 直接安装,比较省事。
万码IY9FEO6U
请问:SwiftUI的动态替换是什么意思?
当你修改 App 界面的代码时,不需要重新启动 App,Xcode 就能立刻在预览窗口中显示出更新后的样子。
就像你在画画,刚画一笔,画板上就马上出现了这一笔的效果,省去了反复保存、编译和运行 App 的步骤,让你可以更快地调整和设计界面。
万码IY9FEO6U
如何关闭 iterm2 的 「command+回车」会放大缩小窗口的快捷键?
在设置 -> Keys -> Key Bindings。
添加一个快捷键,cmd-enter,Action 设置为 Ignore。
"https://wmprod.oss-cn-shanghai.aliyuncs.com/community/1724821630751_gBDi.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/community/1724821630751_gBDi.png)
万码IY9FEO6U
后端redis缓存逻辑问题?
各位后端大佬,最近接触redis。
业务场景是这样的,一个最简单的博客系统,我现在需要记录 文章的点赞总数 以及用户是否点过赞。
之前是用MySQL去做的很简单。现在我想用redis去做有以下一些疑惑:
假如A用户点完赞,点赞信息存在Redis。A用户刷新页面重新请求页面,后端从MySQL进行查询数据,但是那时候A用户的redis数据还没同步到MySQL(一天一同步,还是说多少时间最好),我是不是要循环MySQL查询出来的数据列表的同时再去Redis判断用户对当前循环的文章id是否点过赞?并且将MySQL的文章总数加上Redis记录的点赞总数再返回给前端吗?我不知道这样设计是不是对的。
万码IY9FEO6U
Redis哨兵在选举期间如果有写请求到达如何处理?
从master宕机到选举出新的master之间这段时间的写请求大家平时都是怎么处理的,直接丢弃还是说找个队列啥的存起来?
万码IY9FEO6U
Redis 如何实现Map的value过期呢?
需求是这样的:
用户状态的数据结构
用户id: 用户状态(在线,禁言,限制登陆等),user:id:123 -> 0
开始我是把用户id直接用 set 进redis,最简单的数据结构,然后去更新对应的状态
后来需要统计在线用户,把id查到返回,似乎只能通过正则 user:id* 把相关的keys查到,然后代码中去判断状态是否是在线的
但是 user:id* 耗时太慢了,考虑换成map,这样直接定位到map,减少了 user:id* 这种匹配查询
又发现我的key是需要设置过期时间的,user:id:123 不是一直有效的,map又不能设置value的过期时间
有点纠结,我感觉需要多个辅助数据结构来实现功能,有没有既能利用redis的过期时间,又能提高查询效率的办法?(感觉我可能需要这样一个容器结构,能把全部 user:id* 放到一起,这样查询效率高,然后我再去设置每个key的过期时间)
求指教
万码IY9FEO6U
node redis延时回调怎么用?
为了实现订单超时功能,准备用redis的延时回调,即:设置set key=订单id,同时设置过期时间,在过期执行的回调函数中做超时处理
现在问题是,我用的node,我找了ioredis这个node操作redis的库,但是没找到那个超时回调的api在哪。。。
有人用过这个吗?或者推荐个其他的库?或者用node做过这个功能,能分享一下怎么做的吗?
现在尝试用redis的发布订阅,但是也没找到怎么设置延时发布
const redis = new Redis({
port: 6379, // Redis port
host: '127.0.0.1', // Redis host
family: 4, // 4 (IPv4) or 6 (IPv6)
password: '',
db: 5,
});
console.log('setTime =', new Date());
redis.on('pmessage', function (pattern, channel, message) {
console.log(`${pattern}client received message on${channel}${message}`);
});
redis.psubscribe('__keyevent@0__:expired', function (err, count) {
const d = count;
console.log(d);
console.log('cbTime=', new Date());
});
万码IY9FEO6U
redis 开启lazy-free机制,内部是否加锁了?
redis 开启lazy-free机制后,有些操作会在另一个线程执行,那么对于有些共享且可修改的数据,是不是就要使用同步机制(比如加锁)。
如果使用了同步机制,那单线程还有意义吗,直接支持多线程得了。
万码IY9FEO6U
究竟有没有必要缓存分页?
如果这些分页数据是经常被修改的,那岂不是要经常性的刷新这些分页缓存?
万码IY9FEO6U
Redis缓存哪些数据?
redis应该缓存热点数据,哪些属于热点数据?数据库穿透,到底指的是怎样的穿透,缓存中不可能存储所有数据,缓存中没有的数据,就会造成数据库穿透吗?
万码IY9FEO6U
Redisson 的分布式锁找不到?
大佬们,接口里用的 Redisson 的分布式锁,使用 Jmeter 并发测试也都没有问题,但是在 Reids 管理工具上,找不到这个锁,这是为什么?即使给这个锁设置了很长的超时时间,也找不不到
不知道怎么回事,今天(20240828)又测试了下,现在是有了。
万码IY9FEO6U
异步 线程 堆积问题?
上次的异步使用的是spring自带的 后经人提醒使用
//...
这个...代表上文代码 这整个方法是毫秒级执行 反正就是1s执行好多次
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(5);
scheduler.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
//redis保存数据
}
}, 0, 5, TimeUnit.SECONDS);
//...
我的初心是:每隔5s保存一次到redis
但是现在出现的问题是:并没采取理想那样执行 而是线程达到5后,任务开始进入队列(看了下队列达到最大值 将采取拒绝策略) 之后数据每次保存全部都是最大队列数保存(一次将20左右的保存) 还变成了每秒
那我现在就想到了既然这样 我可不可以 最大线程1 空闲线程1 队列长度1(那个有界堵塞队列) 拒绝策略 这样组一个线程池 可以吗 或者还有其他方式 (求解 给点意见吧)
经过实验多次 终于解决了 看看我的实现过程吧 绞尽脑汁了
1.首先单独new线程不行(不能一进方法就new一次吧 那不直接爆掉)
2.线程池(自定义的 将各个参数都设定1 但这时线程数是1了但别忘了 堆积的任务会放到队列中 但是队列的数量好像不能设置吧 所以可能会出现5s保存一次队列中的数据 所以也不能实现)这个没试 我在试错中 想到这种方式的结果 感觉不可行
3.使用spring的异步 这个在第一次试了 我是没成功 还要改掉默认的线程池 我当时是让线程睡眠5s在保存 结果没成功
4.这个我实验了且成功了。 方法是:在这个方法中将数据保存到set中 ,当然只保存一条就够了,做下逻辑即可(为什么set 我是怕数据重复才采用的),然后在这个方法的下方设定了个定时任务(spring自带的)每5s执行一次 ,执行内容就是redis保存这个set(当然为空这些,做做处理逻辑 ) 保存完清空set
万码IY9FEO6U
redis 大key怎么处理?
业务:一项任务,开始任务时,将任务中的某项数据按照每5s保存一次到redis的list中,结束时删除redis(目前是这样)。想查数据时直接查redis
问题:上述情况将导致list的数据过大(因为不知道这项任务执行多久) 导致大key
现在想怎么处理这个大key
个人想到了:设置一个定时任务,每30分处理一次这个大key,将数据保存到数据库中 。先查数据时就查数据库和redis,将这两种实时数据整合,返回前端 (不知可行不可行)
万码IY9FEO6U
go的连接资源释放问题、Mysql、Redis资源释放?
背景:
新手学习Go做了一个API接口,然后用到了Mysql、Redis,这个资源释放问题有很大的疑惑
求各位高手指点,在线等,谢谢各位大佬,具体代码如下:
Redis
使用的这个包:"github.com/go-redis/redis"
Redis 初始化文件:
import (
"dot/pkg/logging"
"dot/pkg/setting"
"fmt"
"github.com/go-redis/redis"
"net"
"time"
)
var RedisClient *redis.Client
// ServiceInit init Redis
func ServiceInit() {
RedisClient = redis.NewClient(&redis.Options{
// 连接信息
DB: 0, // redis数据库index
Network: "tcp", // 网络类型,tcp or unix,默认tcp
Addr: setting.RedisSetting.Host, // 主机名+冒号+端口,默认localhost:6379
Password: setting.RedisSetting.Password, // 密码
// 连接池容量及闲置连接数量
PoolSize: 15, // 连接池最大socket连接数,默认为4倍CPU数, 4 * runtime.NumCPU
MinIdleConns: 10, // 在启动阶段创建指定数量的Idle连接,并长期维持idle状态的连接数不少于指定数量;。
// 超时
DialTimeout: 5 * time.Second, // 连接建立超时时间,默认5秒。
ReadTimeout: 3 * time.Second, // 读超时,默认3秒, -1表示取消读超时
WriteTimeout: 3 * time.Second, // 写超时,默认等于读超时
PoolTimeout: 4 * time.Second, // 当所有连接都处在繁忙状态时,客户端等待可用连接的最大等待时长,默认为读超时+1秒。
//闲置连接检查包括IdleTimeout,MaxConnAge
IdleCheckFrequency: setting.RedisSetting.IdleCheckFrequency * time.Second, // 闲置连接检查的周期,默认为1分钟,-1表示不做周期性检查,只在客户端获取连接时对闲置连接进行处理。
IdleTimeout: setting.RedisSetting.IdleTimeout * time.Minute, // 闲置超时,默认5分钟,-1表示取消闲置超时检查
MaxConnAge: setting.RedisSetting.MaxConnAge * time.Second, // 连接存活时长,从创建开始计时,超过指定时长则关闭连接,默认为0,即不关闭存活时长较长的连接
//命令执行失败时的重试策略
MaxRetries: 0, // 命令执行失败时,最多重试多少次,默认为0即不重试
MinRetryBackoff: 8 * time.Millisecond, // 每次计算重试间隔时间的下限,默认8毫秒,-1表示取消间隔
MaxRetryBackoff: 512 * time.Millisecond, // 每次计算重试间隔时间的上限,默认512毫秒,-1表示取消间隔
//可自定义连接函数
Dialer: func() (net.Conn, error) {
netDialer := &net.Dialer{
Timeout: 5 * time.Second,
KeepAlive: 5 * time.Minute,
}
return netDialer.Dial("tcp", setting.RedisSetting.Host)
},
//钩子函数
OnConnect: func(conn *redis.Conn) error { //仅当客户端执行命令时需要从连接池获取连接时,如果连接池需要新建连接时则会调用此钩子函数
return nil
},
})
return
}
// Set 设置Key
func Set(key string, data interface{}, time time.Duration) error {
RedisClient.Set(key,data,time)
return nil
}
基本使用的时候都是这么使用,没有进行关闭
// 直接调用封装的方法
pkgname.Set(key , data, time)
Mysql
使用的Gorm
Mysql 初始化文件:
import (
"dot/pkg/setting"
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
"log"
"os"
"strings"
"time"
)
var Db *gorm.DB
// ServiceInit initializes the database instance
func ServiceInit() {
var err error
Logger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
logger.Config{
Colorful: true, // 彩色打印
LogLevel: logger.Info, // 日志级别
SlowThreshold: 200 * time.Millisecond, // 慢 SQL 阈值, 200ms
IgnoreRecordNotFoundError: true, // 忽略ErrRecordNotFound(记录未找到)错误
},
)
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=True&loc=Local&timeout=%s",
setting.DatabaseSetting.User,
setting.DatabaseSetting.Password,
setting.DatabaseSetting.Host,
setting.DatabaseSetting.Name,
setting.DatabaseSetting.Timeout)
Db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
SkipDefaultTransaction: true,
Logger: Logger,
DisableForeignKeyConstraintWhenMigrating: true,
NamingStrategy: schema.NamingStrategy{
SingularTable: true, // 使用单数表名,启用该选项后,`Student` 表将是`student`, 禁用则为`students`
TablePrefix: setting.DatabaseSetting.TablePrefix, // 表名前缀,`User`表为`pre_users`
NameReplacer: strings.NewReplacer("AbcID", "abc_id"), // 在转为数据库名称之前,使用NameReplacer更改结构/字段名称。
},
})
if err != nil {
panic("连接数据库失败, error=" + err.Error())
}
}
调用的时候就直接使用了,也没有进行关闭:
// 写入数据库中,数据落地
func InsertBatchDB(login []PlayerLogin) (bool, error) {
loginModSlice := []PlayerLogin{}
for _, param := range login {
loginMod := PlayerLogin{}
_ = deepcopier.Copy(param).To(&loginMod)
loginModSlice = append(loginModSlice, loginMod)
}
err := models.Db.Create(&loginModSlice).Error
if err != nil {
return false, err
}
return true, nil
}
到底啥时候关闭资源啊?应用不用关闭资源啊,求各位大佬辛苦解答一下,祝各位大佬顺风顺水、升职加薪
万码IY9FEO6U
为什么感觉redis队列不如mysql稳定,容易丢数据,原因何在?
目前的开发环境:php7.2 | thinkphp
1.用mysql实现的架构:
生产者:大量数据先存入mysql中间表(mysql中间表用唯一索引约束唯一性)
多个消费者:循环从mysql中间表中取数据,进行计算后存入mysql结果表
2.用redis实现的架构:
生产者:大量数据先进入redis集合(为了保证重复数据不入队列),确定能进入集合的数据再塞入redis队列
多个生产者:循环从redis队列中取数据,每取一条数据后将该数据从redis集合中删除,对数据进行计算,计算后的数据存入mysql结果表
两种架构在实际使用中发现,用纯mysql的方式实现,结果数据很稳定,没有出现丢失的情况。
而用redis的方式实现,会发现存在数据丢失的情况(即结果表里缺少数据),而且还找不到数据丢失的原因,trycatch和redis日志均无问题。用redis集合加redis队列作为中间过度的方式为什么会不稳定?原因在哪里?
万码IY9FEO6U
redis能监控主从复制的延迟时间吗?怎么减小主从延迟带来的影响?
redis能监控主从复制的延迟时间吗?怎么减小主从延迟带来的影响?
万码IY9FEO6U
redis哨兵+主从模式下,怎么实现的读写分离?
是Jedis这种客户端连接了哨兵后,得到了主从节点缓存到本地,发起命令之前解析命令是读or写,然后请求具体的节点?
还是sentinel统一解析了命令,再做转发?这个过程有负载均衡吗?
网上大多资料介绍读写分离,大多都只是在说主从复制的事,并没有讲解读写分离的过程。
我怎么就知道这个命令是发到从节点执行了呢?
万码IY9FEO6U
django如何使用多个redis数据库?
redis不是有16个数据库吗?
django默认配置使用的是索引为0的数据库。
django如何配置多个redis数据库,例如需要使用redis的0和2数据库?
在视图层应该如何选择不同的redis数据库使用?