上一篇文章 基础篇(一)总结了 Redis 的5种基本类型,这一篇总结下 Redis 的一些小功能。
慢查询
- 客户端命令生命周期
- 发送命令
- 命令排队
- 执行命令
- 返回结果
- 两个配置参数(可以通过修改redis.conf、或者命令修改)
- slowlog-log-slower-than 预设阀值,单位为微妙(默认为:10000)
- slowlog-max-len 最多存储多少条(默认为:128),Redis 使用一个列表来存储慢查询日志
- 命令
- slowlog get [n] 获取慢查询(n为可选)
- slowlog len 获取当前慢查询日志列表的长度
- slowlog reset 日志重置
- 实践
- 慢查询只记录命令执行的时间,并不包含命令排队和网络传输的时间
- 慢查询日志是一个先进先出的队列,如果慢查询日志较多,就会丢失先写入的慢查询
Redis Shell
- redis-cli
- -a 验证密码
- –stat 实时监控Redis状态
- redis-server
- –test-memory (如: redis-server --test-memory 1024 检测当前操作系统能否非配1G的内存给Redis)
- redis-benchmark
- -c 客户端并发数量
- -n 客户端请求总量
- -q 仅展示requests per seconds 的信息
- -k (boolean) keepalive
- -t 对指定命令测试(redis-benchmark -t get,set -q)
- –csv 导出excel
Pipeline
- Redis 提供Pipeline机制,将一组命令进行组装,通过一次RTT(往返时间)发送给Redis。减少执行命令在网络上的时间消耗。
- 下例:将set hello world 和 incr counter 两条命令组装
echo -en '*3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5\r\nworld\r\n*2\r\n$4\r\nincr\r\ n$7\r\ncounter\r\n' | redis-cli --pipe
- 需要注意的点
- Pipeline 是非原子性的
- 组装的命令不宜太多,这样会增加客户端等待时间,同时也会导致一定的网络阻塞
事务和Lua
- multi 命令代表事务的开始,exec 命令代表事务结束,discard 命令代表事务的丢弃
- Redis 的事务并不是真正的原子性。可以通过Lua来实现多个命令执行的原子性
Bitmaps
- 数据结构模型
- 实现了对位的操作
- 基于 string 数据结构实现
- 命令
- setbit key offset value (offset 从0开始,返回值为修改前该位上的值)
- getbit key offset
- bitop op destkey key [key …] (bitmaps 间运算,and, or, not, xor)
- 优点:节省内存空间
- 使用场景
- 存储网站每天的活跃用户
HyperLogLog
- 数据结构模型
- 基于 string 数据结构实现
- 命令
- pfadd key element [element …]
- pfcount key [key …]
- pfmerge destkey sourcekey [sourcekey …] 合并
- 优点:节省内存空间
- 使用场景
- 存储网站 UV (可以和Redis的集合类比)
发布订阅
- Redis 提供简单的发布、订阅。很少用。
GEO
- 数据结构模型
- 基于 zset 数据结构实现
- 命令
- geoadd key longitude latitude member [longitude latitude member …]
- geopos key member [member …]
- geodist key member1 member2 [unit]
- geohash key member [member …]
- 使用场景
- 地理位置存储、计算