Draymonders / Code-Life

The marathon continues though.
27 stars 3 forks source link

redis调研与实践 #88

Open Draymonders opened 4 years ago

Draymonders commented 4 years ago

redis-link

apply

Redis可以做

由于redis是单核的,所以尽量部署多个redis,然后进行loadblance

Draymonders commented 4 years ago

Redis连接池设置

其实就是用来保持长连接, 因为redis-client和redis-server建立链接,要通过 tcp 和 自身的协议, 但是我们经常使用redis,并不希望频繁的去建立链接和释放链接

maxTotal

用来表示最大的连接数,受以下情况影响

maxIdle or minIdle

建议 maxIdle = maxTotal

建议预热minIdle

Draymonders commented 4 years ago

对于RedisTimeOut可以进行的监控

Draymonders commented 4 years ago

Redis持久化

数据异步保存在disk中

RDB

内存快照,可以理解为redis的键值序列化,也可以用于网络传输(主从复制)。

触发机制

AOF

命令的备份写到文件中, redis -> 写命令缓冲区 -> disk

AOF策略

rewrite

由于每条命令都会append到disk里,disk占用较大,而命令中多会出现这样的结果

set a b
set a c
set a d

其实,只需要最后的set a d就可以了,因此redis提供了rewrite功能。

RDB 和 AOF抉择

最佳实践

fork 信息查询

redis-cli info | grep latest_fork_usec

Draymonders commented 4 years ago

内存相关

redis-cli info memory 查看redis内存相关的信息

内存分布

内存主要分为redis自身运行占用内存,缓冲区(客户端缓冲区, 复制缓冲区(slave复制时使用), AOF缓冲区), 对象(kv)占用内存,fork占用内存

客户端缓冲区

redis-cli client list查看客户端详细信息

内存回收策略

删除过期键值

内存溢出策略

config get maxmemory-policy去查看内存溢出的策略,用config set maxmemory-policy allkeys-lru来修改内存溢出的策略

内存优化

合理选择数据结构

也就是键的类型, string, hash, set, zset, hyperloglog, geo等

合理优化数据结构-内部编码

wZKGm4.jpg

给一个场景 picId -> userId (10亿)

Draymonders commented 4 years ago

slowlog

slowlog是一个队列,先入先出,记录大于slowlog时间阈值的命令以及执行时间

自己还未解决的坑