Redis开发与运维第三章笔记

慢查询
慢查询的两个配置参数
  • slowlog-log-slower-than
    单位(微秒),默认值是10000,假如执行了一条“很慢”的命令(例如keys*),如果它的执行时间超过了10000微秒,那么它将被记录在慢查询日志中如果slowlog-log-slower-than=0会记录所有的命令,slowlog-log-slowerthan<0对于任何命令都不会进行记录
  • slowlog-max-len
    列表的最大长度,一个新的命令满足慢查询条件时被插入到这个列表中,当慢查询日志列表已处于其最大长度时,最早插入的一个命令将从列表中移出
修改配置文件
config set key value #动态修改配置文件(不持久)
config rewrite #将配置持久化到本地配置文件
慢查询日志相关命令
slowlog get [n] #获取慢查询日志
slowlog len #慢查询日志列表当前长度
slowlog reset #慢查询日志重置

每个慢查询日志有4个属性组成:

  • 标识id
  • 发生时间戳
  • 命令耗时
  • 执行命令和参数
redis-cli
info #查看信息
-r num command #表示将命令执行多次
-i num #每隔num秒执行一次命令,须与-r一起使用(单位s),可用小数表示ms
-x #从标准输入读取数据作为redis-cli的最后一个参数
-a #如果设置了密码,可以用-a选项,这样就不用手动输入auth命令
--scan和--pattern #用于扫描指定模式的键
--slave #把当前客户端模拟成redis节点的从节点,可以用来获取当前redis节点的更新操作
--rdb #请求redis实例生成并发送RDB持久化文件,保存在本地
--pipe #用于将命令封装成redis通信协议定义的数据格式,批量发送给redis执行
--bigkeys #使用scan命令对redis键进行采样,从中找出内存占用比较大的键值
--eval #执行指定的lua甲苯
--latency #监测平均网络延迟
--latency-history #分时段监测延迟,15s输出一次
--latency-dist #使用统计图表的形式从控制台输出延迟统计信息
--stat #实时获取redis的重要统计信息
--no-row #--no-raw选项是要求命令的返回结果必须是原始的格式,--raw返回格式化后的结果
redis-server
redis-server --test-memory num #监测当前操作系统能否稳定分配指定容量的内存给redis,单位(MB)
redis-benchmark

redis-benchmark 可以为 redis 做基准性能测试,它提供了很多选项测试redis相关性能

-c num #客户端并发数量,默认50
-n num #客户端请求总量,默认100000
#redis-benchmark -c 100 -n 20000 表示100个客户端同时请求redis,共20000次
-q #仅显示redis-benchmark的requests per second信息
-r num #向redis插入num个随机键
-p #每个请求的pipeline的数据流(默认为1
-k #客户端是否使用keepalive 1为使用
-t #对指定命令进行基准测试
--csv #结果按照csv格式输出
事务

redis提供了简单的事务功能,将一组需要一起执行的命令放在multi和exec两个命令之间,如果要停止事务的执行,可以使用discard命令代替exec

命令错误
  1. 语法错误会造成整个事务无法执行
  2. 语法正确,运行时错误,redis不支持回滚功能,错误之前的命令会执行,需要开发人员自己修复这类问题

有些场景需要在事务之前确保事务中的key没有被其他客户端修改过,才执行事务,否则不执行(类似于乐观锁),redis提供了watch来解决这类问题
在这里插入图片描述

lua用法概述

(1)字符串

local string val = "world" //local表示局部变量

(2)数组

local tables myArray = {"redis",88.0} //注意lua中数组下标从1开始计算

(3) for

for i = 1,100
do
	//something
end
// #tables 获得数组长度

for index,value in ipairs(myArray)
do
	//something
end

(4)if else

if a<=1
then
	//somthing
else
	//somthing
end

(5)hash(其实也是tables)

local tables user_1 = { age = 28 }
print("echo ".. user_1["28"])  //..连接字符串
for key,value in pairs(use_1)

(6)函数

function funcName()
end
lua与redis

在redis中执行Lua脚本有两种方法:eval和evalsha
(1) eval

eval  脚本内容  key个数  key列表  参数列表
eval 'return "hello "..KEYS[1]..ARGV[1]' 1 redis world
输出为 "hello redisworld"

如果lua脚本较长,可以使用redis-cli --eval直接执行文件
(2)evalsha
首先将脚本加载到redis服务端,得到该脚本的SHA1校验和,evalsha命令使用SHA1作为参数可以直接执行对应lua脚本,避免每次发送lua脚本的开销

redis-cli script load "$(cat lua_get.lua)" #将脚本内容加载到redis中
evalsha SHA1code key个数  key列表  参数列表
lua的redis API

redis.call()
redis.pcall()
如果redis.call执行失败,脚本会返回错误
redis.pcall会忽略错误继续执行脚本
redis.log()可以将lua脚本的日志输出到redis的日志文件中

lua脚本的好处
  1. lua脚本在redis中是原子执行的
  2. 可以创造自己定制的命令,并常驻redis内存中,实现复用
  3. 可以将多条命令一次性打包,有效减少网络开销
redis管理lua脚本
script exists [sha1...] #判断sha1是否已经加载到内存中
script flush #清除redis内存已经加载的所有lua脚本
script kill #杀掉正在执行的lua脚本

redis 提供了一个 lua-time-limit 此参数,默认是5s,但并不会停止,而是向其他命令发送busy信号,提示使用 script kill 杀掉这个脚本。不过如果当前 lua 脚本正在执行写操作,则 kill 不会生效

Bitmaps
setbit key offset value #设置键的第offset索引位的值
getbit key offset #获取键的第offset位的值
bitcount [start] [end] #获取指定范围内1的个数
bitop op destkey [key...] #对多个bitmaps做集合运算,op = or, and , not , xor
bitpos key targetBit [start] [end]#计算第一个值为targetBit的位置,start和end可以设定一个范围,单位(字节),即start为1时,从index8开始
HyperLogLog

一种基数算法,利用极少的内存空间完成独立总数的统计

pfadd key [elment...] #向HyperLogLog添加元素,成功返回1
pfcount [key...] #计算独立用户数
pfmerge destkey [sourcekey...]

HyperLogLog内存占用极少,但不是100%正确,存在%0.81的失误率
所以在选择HyperLogLog是需要确认如下两条:

  • 只为了计算独立总数,不需要获取单条数据
  • 可以容忍一定的误差率
发布订阅
publish channel message #发布消息
subscribe [channel...] #订阅消息
unsubscribe [channel...] #取消订阅
psubscribe [pattern...] #按照模式订阅
unpsubscribe [pattern...] #按照模式取消订阅
pubsub channels [pattern] #查询活跃的频道(至少有一个订阅者)
pubsub numsub [channel...] #查看频道订阅数
pubsub numpat #查看模式订阅数

有关订阅消息有两点需要注意:

  1. 客户端在执行订阅命令后进入了订阅状态,只能接收subscribe,psubscribe,unsubscribe,punsubscribe的四个命令
  2. 新开启的订阅客户端,无法收到该频道之前的消息,因为redis不会对发布的消息进行持久化

和很多专业的消息队列系统相比,redis的发布订阅略显粗糙,例如无法实现消息堆积和回溯

GEO

GEO(地理信息定位)功能,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能。
这部分暂时不想了解,先跳过,有需要再补上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值