查看Redis信息
- info指令可以显示的信息非常多,分为9大块,每块都有非常多的参数
- Server:服务器运行的环境参数
- Clients:客户端相关信息
- Memory:服务器运行内存统计数据
- Persistence:持久化信息
- Stats:通用统计数据
- Replication:主从复制相关关系
- Cpu:Cpu使用情况
- Cluster:集群信息
- KeySpace:键值对统计数据量信息
- info 获取所有信息
- info + 某块名称=获取某块内容
- info memory
分布式锁
- 避免主从下,客户端在主节点申请一把锁后,主节点宕机,从节未能同步,产生的不一致的情况
- 使用RedLock通过提供的多个没有主从的Redis实例
- 向过半的节点发送set指令,一旦一半以上的节点同意,则加锁成功
过期与淘汰
- redis会将每个设置的了过期事件的key放入一个独立的字典中
- 分为集中处理(定时任务定时遍历删除)和零散处理(客户端访问时检查key是否过期,过期即删除)
- Redis使用内存超出内存限制时,内存数据和磁盘产生频繁交换,导致性能下降
- Redis提供多种可选策略,来淘汰内存
- noeviction:不能继续写请求,只提供del,和读请求
- volatile-lru:淘汰设置过期时间且
使用次数
最少key - volatile-ttl:淘汰设置过期时间且
剩余时间
最小key - olatile-random:
随机
淘汰设置过期时间的key - allkeys-lru:所有的key中,
使用最少次数
的key - allkeys-random:所有key中,
随机
淘汰
- Redis的使用次数和最少使用的算法是近似LRU算法
懒删除
- 直接删除del,释放内存非常快,但是当一个bigkey被删除时,就会带来明显的卡顿
- 对删除操作进行懒处理,将删除动作交给后台线程进行异步回收
- 使用unlink指令对删除操作进行懒处理
- 主线程将unlink元素从redis上摘除,将其内存回收包装为任务,塞入异步任务队列,后台线程从此队列拿任务操作
保卫Redis
- 指令安全
- 危险指令
- keys:会造成redis卡顿
- flushall和flushdb会让Redis所有数据清空
- 使用rename-command将危险指令替换为其他字符或“删除”
- rename-command [危险指令] [自定义命令]
- rename-command [危险指令] “”->危险指令不能使用
- 危险指令
- 端口安全
- Redis默认监听6379端口,所以可能会被暴露在公网上,黑客可以通过Redis执行Lua脚本拿到服务器权限就会清空数据库
- 修改监听端口和密码
- requirepass [密码]
- masterauth [密码]->主节点设置密码,从节点必须配置密码
- Lua脚本安全
- 可以禁止Lua脚本由用户输入的内容UGC生成
- SSL代理
- Redis不支持SSL链接,意味着客户端和服务器之间的数据不应该直接暴露否则会被监听
- 要在公网上使用,可以用SSL代理