数据结构
string
list
set
有序 set
hash
设计
内存回收机制
redis不会实时回收内存;
它的key是分页存放的,当一个页的所有key都被删除后,才会统一回收该页的内存;
虽然没有立即回收内存,但是不用的内存还是可以分配给新的key使用;
手动执行flushdb
,可以立即回收内存。
过期机制
主节点
- 懒汉式删除
- 定时删除
可能出现的问题
如果有大量key同时过期,此时客户端请求,服务端正好处于过期扫描中,那么至少要等待25ms(另外可能存在多个内存页的回收耗时)
建议
避免大量key同时过期,timeout += random(second)
原理
管道
pipeline
的本质和单次发送命令差不多,只是变成了连续发送命令到服务端,省去多次等待IO的时间
避免大key
指的是大的value,以下情况容易造成卡顿:
- 迁移
- 扩容时申请内存
用scan扫描出大key,-i 每 scan 100条 sleep 0.1s1
redis-cli --bigkeys -i 0.1
应用场景
分布式锁
限流
附近的人(坐标,两点间距离)
运维
客户端连接数
复制积压缓存区
安全
改写/禁用危险指令
改写 keys 为 rename_keys1
rename-command keys rename_keys
禁用1
rename-command keys ''
不用6379,加密码,走内网,非root启动red is
SSL代理-spiped
实在要走外网时