Open Draymonders opened 4 years ago
其实就是用来保持长连接, 因为redis-client和redis-server建立链接,要通过 tcp 和 自身的协议, 但是我们经常使用redis,并不希望频繁的去建立链接和释放链接
用来表示最大的连接数,受以下情况影响
建议 maxIdle = maxTotal
建议预热minIdle
数据异步保存在disk中
内存快照,可以理解为redis的键值序列化,也可以用于网络传输(主从复制)。
copy on write
策略save 900 1
save 300 10
save 60 10000
命令的备份写到文件中, redis -> 写命令缓冲区 -> disk
由于每条命令都会append到disk里,disk占用较大,而命令中多会出现这样的结果
set a b
set a c
set a d
其实,只需要最后的set a d
就可以了,因此redis提供了rewrite
功能。
最佳实践
save
操作,因为reload
快。everysec
,只会丢1s的数据,集中管理rewrite
。maxmemory 5G
的设置,这样fork,以及write的代价不会很高。redis-cli info | grep latest_fork_usec
redis-cli info memory
查看redis内存相关的信息
内存主要分为redis自身运行占用内存,缓冲区(客户端缓冲区, 复制缓冲区(slave复制时使用), AOF缓冲区), 对象(kv)占用内存,fork占用内存
redis-cli client list
查看客户端详细信息
用config get maxmemory-policy
去查看内存溢出的策略,用config set maxmemory-policy allkeys-lru
来修改内存溢出的策略
Noeviction
: 默认策略,不会删除任何数据,拒绝写入操作,并且返回OOM command
Volatile-lru
: 根据LRU算法删除设置了超时属性(expire)的键,直到腾出足够空间。如没有可删除的,回退到Noeviction
Allkeys-lru
: 如上,只是所有的key都可以被删Allkeys-random
: 如其名 Volatile-random
: 随机删除设置超时(expire)的键Volatile-ttl
: 删将要过期的键也就是键的类型, string, hash, set, zset, hyperloglog, geo等
给一个场景 picId
-> userId
(10亿)
set picId userId
hset allPics picId userId
(不好运维)hset picId/100 picId%100 userId
(两级hash, 因为第二级的hash用的数据结构是ziplist
)slowlog是一个队列,先入先出,记录大于slowlog时间阈值的命令以及执行时间
config get slowlog-max-len
config get slowlog-log-slower-than
redis-link
apply
Redis可以做
由于redis是单核的,所以尽量部署多个redis,然后进行loadblance