-
事务
- 一个命令执行的队列,中间不会被打断或者干扰
- 基本操作、
- 开启事务:multi
- 作用:设定事务的开启位置,执行此命令后,后续所有指令均加入事务中
- 执行事务:exec
- 作用:设定事务结束的位置,同时执行事务
- 取消事务:discard
- 作用:终止当前事务的定义
- 开启事务:multi
- 注意
- 如果事务中包含的命令存在语法错误,整体事务中的命令均不会执行
- 运行错误的命令不会被执行
- 已经执行完毕的命令对应的数据不会自动回滚,需要程序员手动回滚
- 手动事务回滚
- 记录操作过程中被影响数据之前的状态
- 单数据:string
- 多数据:hash、list、set、zset
- 设置指令回复所有被修改的项
- 单数据:直接set
- 多数据:修改对应值或整体复制
- 记录操作过程中被影响数据之前的状态
- 锁
- 添加监视锁:watch key1 [key2…]
- 取消所有key的监视:unwatch
- 如果exec之前key发生了变化,那么终止事务执行
- 分布式锁
- 创建锁:setnx lock-key value
- 有值则返回设置失败,无值返回成功
- 返回成功,拥有控制权,进行下一步具体的业务操作
- 返回失败,不具有控制权,排队或等待
- 删除锁:del lock-key
- 创建锁:setnx lock-key value
- 分布式锁改良——为锁添加时间限定
- expire lock-key second
- pexpire lock-key milliseconds
-
删除策略
-
过期数据:超过存活时间的数据
-
每个数据对应的地址,对应着一个删除时间
-
目标:在内存占用和CPU占用之间寻找一种平衡
-
定时删除
- 创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作
- 优点:节约内存、快速释放掉不必要的内存占用
- 缺点:CPU压力很大,会影响redis服务器响应时间和指令吞吐量
- 总结:用处理器性能换取存储空间(拿时间换空间)
-
惰性删除
- 数据到达过期时间不做处理,等下次访问该数据时:
- 发现未过期,返回数据
- 发现已过期,删除,返回不存在
- 优点:节约CPU性能,发现必须删除时才删除
- 缺点:内存压力很大,出现长期占用内存的数据
- 总结:用存储空间换取处理器性能(拿时间换空间)
- 数据到达过期时间不做处理,等下次访问该数据时:
-
定期删除
- 周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比方式控制删除频度
- 特点1:CPU性能占用设置有峰值,检测频度可自定义
- 特点2:内存压力不是很大,长期占用内存的冷数据会被持续清理
- 总结:周期性抽查存储空间(随机抽查,重点抽查)
-
逐出算法
- 最大可使用内存:maxmemory
- 占物理内存的百分比,默认为0表示不限制。生产环境中根据需要设定,通常在50%以上
- 每次选取待删除数据的个数:maxmemory-samples
- 选取数据时并不会全库扫描,采用随机获取数据的方式作为待检测删除数据
- 删除策略:maxmemory-policy
- 到达最大内存后,对被挑选出来的数据进行删除的策略
- 最大可使用内存:maxmemory
-
-
redis配置
- 服务器配置
- 设置服务器以守护进程方式运行: daemonize yes|no
- 绑定主机地址:bind 127.0.0.1
- 设置服务器端口号:port 6379
- 设置数据库数量:databases 16
- 设置服务器以指定日志记录级别:loglevel debug |verbose|notice|warning
- 开发期设置为verbose,生产环境中配置为notice降低写日志IO的频度
- 日志记录文件名:logfile 端口号.log
- 客户端配置
- 设置同一时间最大客户连接数:maxclients 0
- 默认无限制,当客户端连接达到上限,redis会关闭新的连接
- 客户端闲置等待最大时长,达到最大值后关闭连接: timeout 300
- 如需关闭该功能,设置为0
- 设置同一时间最大客户连接数:maxclients 0
- 服务器配置
-
高级数据类型
-
Bitmaps
- 基本操作
- 获取指定key对应偏移量上的bit值:getbit key offset
- 设置指定key对应偏移量上的bit值,value是1或0:setbit key offset value
- 扩展操作
- 对指定key按位进行交、并、非、异或操作,并将结果保存在destKey中
- bitop op destKey key1 [key2…]
- op
- and:交
- or:并
- not:非
- xor:异或
- op
- bitop op destKey key1 [key2…]
- 统计key中1的值
- bitcount key [start end]
- 对指定key按位进行交、并、非、异或操作,并将结果保存在destKey中
- 基本操作
-
HyperLogLog
- 基数:数据集去重后的元素个数
- HyperLogLog用来做基数统计
- 基本操作
- 添加数据:pfadd key element [element …]
- 统计数据:pfcount key [key…]
- 合并数据:pfmerge destkey sourcekey [sourcekey…]
-
GEO
- 基本操作
- 添加坐标点:geoadd key longitude latitude member [longitude latitude member]
- 获取坐标点:geopos key member [member]
- 计算坐标点距离:geodist key member1 member2 [unit]
- 基本操作
-