redis-2-小功能大用处
2018-07-30 17:32:23 41 举报
AI智能生成
根据redis开发与运维一书,整理的知识点,分章节总结,有兴趣的可以查看下,这是第二章节
作者其他创作
大纲/内容
慢查询分析
命令执行
1:发送命令;2:命令排队;3:命令执行;4:返回结果
慢查询配置
阈值
slowlog-log-slower-than(单位毫秒,超过此值则认为是慢查询)
slowlog-max-len(redis记录慢查询的最大条数)
命令
slowlog get [n] 获取n条慢查询
slowlog len 当前慢查询长度
slowlog reset 重置
最佳实践
配置慢查询条数1000
查过10ms判定为慢查询(高并发设定为1ms,OPS=1000)
执行命令超时,查询是否由慢查询导致
定期执行slow get,持久化慢查询日志
Pipleline
将一组命令进行组装,传递给redis执行(省略了各个命令自己的网络传输时间)
与批量命令比对
原生批量命令是原子的,PP不是
原生批量命令是一个命令对应多个key,PP支持多个命令
原生批量命令是Redis服务端支持实现的,PP需要客户端和服务端共同实现
可以增加性能,但是组装的条数不能没有限制
Bitmaps
数据模型
1:本身不是一种数据结构,而是字符串,但可以对字符串的位进行操作
2:单独提供了一套命令,不同于字符串,可类比其为以位为单位的数组,只能存0或1,数组下标叫做偏移量
命令
设置值
setbit key offset value
获取值
getbit key offset
获取指定范围
bitcount start end
运算
bit op destkey key [key ...]
bit op destkey key [key ...]
交集
bitop and key_1 key_2
并集
bitop or key_1 key_2
非
bitop not key_1 key_2
异或
bitop xor key_1 key_2
计算bitmaps中第一个值为targetBit的偏移量
bitops key targetBit start end
使用bitmaps能省很大空间,但是要结合实际情况分析
HyperLogLog
redis shell
redis-cli
-r:redis-cli -r 3 ping,表示命令执行多次
-i:redis-cli -r 5- i 1 ping,表示每隔1秒执行一次,共执行5次
--slave:把当前节点当做redis节点的从节点
--rdb:请求redis实例生成并发送rdb持久化文件,保存在本地
--pipe:将命令封装成redis定义的数据格式
--bigkey:使用scan命令对redis的键采样,找到占用较大的键
--eval:执行lua脚本
--stat:实时获取redis重要的统计信息
--raw / --no-raw:返回格式化以后的结果/返回原始格式
redis-server
--test-memory:检测当前操作系统能否稳定分配指定容量的内存给redis
redis-benchmark
事务与lua
事务
执行
1:multi
2:执行命令
3:exec(事务执行 ) discard(事务停止)
不支持回滚
watch
当一个key被watch修饰
在事务提交前此key的值未被改,则事务提交成功
在事务提交之前有改动,则事务不执行
lua
redis中执行lua
1:eval 脚本内容 key个数 key列表 参数列表
eg:eval 'return "hello" .. KEY[1] .. ARGV[1]' 1 redis world
返回 hello redisworld
2:evalsha
1:加载redis脚本,返回SHA1值
2:执行对应的SHA1值
避免每次发送脚本的开销,脚本常驻服务端复用
eg>1:script load "$(cat lua_get.lua)"
返回SHA1,比如abcde123
2:evalsha abcde123
lua实现对redis访问
redis.call,eg:redis.call("set","hello","world")
redis.pcall,和上述一致
区别:redis.call如果执行失败,那么脚本执行结束后会直接返回错误,则pcall会忽略错误继续执行脚本
优势
1:lua在redis中执行是原子执行的,不会插入其他命令
2:可以帮助开发运维同事创建/定制自己的命令,并且常驻在内存中
3:将多个命令一次性打包,减少网络开销
redis管理脚本
script load:加载脚本到内存
script exists sha1 .. :判断脚本是否已加载到内存
script flush :清除所有已加载到内存的脚本
script kill :杀掉正则执行的脚本
注意:1:redis提供lua-time-limit指定脚本执行超时时间,但是此时间只是向其他命令发送BUSY信号
注意:2:上述情况需要使用script kill杀掉脚本,但注意若脚本已执行过写操作,kill命令将不生效
发布订阅
0 条评论
下一页
为你推荐
查看更多