redis实用操作小结

  1. 键的命名
  • 通常情况下是使用冒号来划分键名,如user:id:name
  • 这些冒号在早期的Redis版本中作为存储命名空间数据的概念。在早期版本中,redis只支持字符串,如果想存储电子邮件和“bob”的历史,必须将其全部存储为字符串,因此使用了冒号,如user:bob:email
  • 在redis中具有特殊的处理或性能特性,唯一的目的是命名数据空间以再次找到它。现在,可以使用散列来存储大部分的冒号键
  • 使用合适的命名方法会简化你的数据库管理,当你通过你的应用程序或者服务做键的命名空间时,可以在数据迁移、转换或者删除时轻松的识别

  1. 删除匹配模式下的key
    以删除所有以name开关的key为例
  • 使用lua脚本

    • redis-cli -a "password" -n 0 -p 6379 keys "name:*" | xargs -i redis-cli -a "password" -n 0 -p 6379 del {}
    • 这样一个坏处每次都要建立一个连接,量小的话还可以接受,量大的话,效率不行
  • 使用内置的lua解释器
    • redis-cli -a "password" -n 0 -p 6379 EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 'name:*'
    • 量大的情况下,lua函数unpack会出现问题: (error) ERR Error running script (call to f_e177a091510d969af3b388ee986dbe6658df6b57): user_script:1: too many results to unpack
  • 上述方式的改进
    • redis-cli -a "password" -n 0 -p 6379 EVAL "local keys = redis.call('keys', ARGV[1]) for i=1,#keys,5000 do redis.call('del', unpack(keys, i, math.min(i+4999, #keys))) end return #keys" 0 'name:*'
    • 一次性unpack太多会出问题,那就干脆一次5000吧,这样就不会有问题了
  • 使用scan命令
    • redis-cli -a "password" -n 0 -p 6379 --scan --pattern "name:*" | xargs -L 5000 redis-cli -a "password" -n 0 -p 6379 DEL
    • 自从redis2.8以后就开始支持scan命令,速度处理也是非常快的

  1. 排序
    返回或存储key的listsetsorted set 中的元素。默认是按照数值类型排序的,并且按照两个元素的双精度浮点数类型值进行比较,如果是字符串需要加ALPHA参数。
  • 普通排序

    • sort key 按照key升序排列
    • sort key desc 降序排序
    • SORT testkey alpha testkey中存储的为字符串时这样使用
  • 使用limit限制返回结果,此修饰符有一个 offset 参数,指定了跳过的元素数量;还带有一个 count 参数,指定了从 offset 开始返回的元素数量
    • SORT mylist LIMIT 0 10 返回排序后的列表 mylist 从第0个元素(offset 是从0开始的)开始的10个元素
    • SORT mylist LIMIT 0 5 ALPHA DESC,修饰符一起使用
  • 使用外部key排序,使用外部key 的数据作为权重,代替默认的直接对比键值的方式来进行排序
    • SORT mylist BY weight_* 列表 mylist包含元素1、 2 和 3,分别代表了存储在object_1、object_2 和 object_3中的对象的唯一ID。当这些对象关联到存储在weight_1、 weight_2 和 weight_3 中的权重后, SORT 命令就能使用这些权重按照下述语句来对 mylist 排序
    • SORT mylist BY nosort 选项可以是一个并不存在的key,这会导致 SORT 命令跳过排序操作。这在我们获取未经排序的外部key(参考下文的 GET 选项)时非常有用
  • 获取外键get
    • SORT mylist BY weight_* GET object_* GET # GET 选项可多次使用,以便获取每一个原始列表、集合或有序集合中元素的key。还可以通过使用特殊 # 模式获取 GET 元素本身
    • SORT mylist BY weight_*->fieldname GET object_*->fieldname 可以在hash的属性上使用 BY 和 GET 选项,字符串 -> 用于区分key名称和哈希属性的名称。key被替换为上面所记录的,结果key中存储的hash用于获取特定hash的属性
  • 保存排序结果
    • SORT mylist BY weight_* STORE resultkey 使用 STORE 选项,可以将结果存储于一个特定的列表中,以代替返回到客户端

  1. 键空间通知
    键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件(截止目前,该功能尚不完善,仍在开发中)。
  • 注意:

    • Redis 目前的订阅与发布功能采取的是发送即忘(fire and forget)策略, 所以如果你的程序需要可靠事件通知(reliable notification of events), 那么目前的键空间通知可能并不适合你
    • 当订阅事件的客户端断线时, 它会丢失所有在断线期间分发给它的事件
  • 事件类型
    • 键空间通知,所有通知以 __keyspace@<db>__ 为前缀,键空间频道的订阅者将接收到被执行的事件的名字,如 del
    • 键事件通知,所有通知以 __keyevent@<db>__ 为前缀,键事件频道的订阅者将接收到被执行事件的键的名字,如 mykey
  • 配置
    • 因为开启键空间通知功能需要消耗一些 CPU , 所以在默认配置下, 该功能处于关闭状态
    • 可以通过修改 redis.conf 文件, 或者直接使用 CONFIG SET 命令来开启或关闭键空间通知功能
    • 当 notify-keyspace-events 选项的参数为空字符串时,功能关闭
    • notify-keyspace-events 的参数可以是以下字符的任意组合, 它指定了服务器该发送哪些类型的通知:
字符 发送的通知
K 键空间通知,所有通知以 keyspace@ 为前缀
E 键事件通知,所有通知以 keyevent@ 为前缀
g DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
$ 字符串命令的通知
l 列表命令的通知
s 集合命令的通知
h 哈希命令的通知
z 有序集合的通知
x 过期事件:每当有过期键被删除时发送
e 驱逐事件:每当有键因为 maxmemory 政策而被删除时发送
A 参数 g$lshzxe 的别名,所有事件
  • 输入的参数中至少要有一个 K 或者 E , 否则的话, 不管其余的参数是什么, 都不会有任何通知被分发
  • 将参数设为字符串 “AKE” 表示发送所有类型的通知
  • 如下示例,设置监听所有键空间事件,一段时间后关闭:
127.0.0.1:6379>  config set notify-keyspace-events KA
127.0.0.1:6379> psubscribe '__key*__:*'
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "__key*__:*"
3) (integer) 1127.0.0.1:6379> config set notify-keyspace-events ""

参考资料
Redis 命令参考
超大批量删除redis中无用key+配置
Redis的排序命令使用(Sort)

redis实用操作小结相关推荐

  1. python redis连接池获取后关闭_python通过连接池连接redis,操作redis队列

    在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...

  2. python连接redis有中文_Python连接Redis并操作

    首先开启redis的外连 sch01ar@ubuntu:~$ sudo vim /etc/redis/redis.conf 把bind 127.0.0.1这行注释掉 然后重启redis sudo /e ...

  3. redis php操作日志,php-redis笔记

    php-redis笔记 介绍 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使 ...

  4. Redis-学习笔记02【Redis命令操作】

    Java后端 学习路线 笔记汇总表[黑马程序员] Redis-学习笔记01[Redis环境搭建] Redis-学习笔记02[Redis命令操作] Redis-学习笔记03[Redis持久化] Redi ...

  5. Python学习笔记之类型判断,异常处理,终止程序操作小结

    Python学习笔记之类型判断,异常处理,终止程序操作小结 运行结果: 这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发. 爬虫.数据分析.数据可视化.机 ...

  6. php连接redis的操作库predis操作大全

    predis是php连接redis的操作库,由于它完全使用php编写,大量使用命名空间以及闭包等功能,只支持php5.3以上版本,故实测性能一般,每秒25000次读写,相信改换c语言编写的php扩展后 ...

  7. 能够提高开发效率的Eclipse实用操作

    概要: 工欲善其事,必先利其器.对于程序员来说,Eclipse便是其中的一个"器".本文会从 Eclipse快捷键和实用技巧这两个篇章展开介绍.Eclipse快捷键用熟后,不用鼠标 ...

  8. Python Redis pipeline操作(秒杀实现)

    Python Redis pipeline操作(秒杀实现) 设想这样的一个场景,你要批量的执行一系列redis命令,例如执行100次get key,这时你要向redis请求100次+获取响应100次. ...

  9. Redis数据库操作指令

    # 1.Redis中库说明 - 使用redis的默认配置器动redis服务后,默认会存在16个库,编号从0-15 - 可以使用select 库的编号 来选择一个redis的库# 2.Redis中操作库 ...

最新文章

  1. Seaborn可视化图像调整图像大小(figure size)方法实战(Adjust the Figure Size)
  2. 人工智能如何彻底改变全球物流和供应链管理
  3. 面向对象PHP之静态延迟绑定
  4. 地图投影系列介绍(二)----地理坐标系
  5. EF6源码学习-准备篇
  6. 使用SQL Server存储ASP.NET Session变量
  7. mysql 闪回_MySQL数据误删除的快速解决方法(MySQL闪回工具)
  8. Java面试官最爱问的垃圾回收机制,Java编程配置思路详解
  9. 恢复误删的Windows文件
  10. 用户自定义多选框checkbox
  11. android接收红外传感器发送的脉冲信号,Arduino红外传感器-IR Receiver Module红外接收模块...
  12. 3运输层 - 可靠数据传输的原理rdt
  13. 形状因子对禁带的调控
  14. 2022-07-31 零基础吉他入门知识
  15. vbox的虚拟机Ubuntu的共享文件夹无法创建软链的问题解决
  16. 调用android手机分享
  17. 勤哲服务器产品图片显示,用勤哲Excel服务器实现图片管理(1) -电脑资料
  18. OC中常用的数学函数以及浮点处理函数
  19. 智慧职教,云课堂app
  20. c语言农场,C语言课程设计《开心农场》源码公开

热门文章

  1. sizeof计算二维数组的大小
  2. 汉中电大计算机应用基础试题及答案,电大网考计算机应用基础统考试题(00001).doc...
  3. 人类大脑到人工智能合并技术已经在开发
  4. 音乐人解密:究竟是如何一步一步成为音乐人的?
  5. 【正点原子FPGA连载】第四十九章OV5640摄像头HDMI灰度显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
  6. 让 CheckStyle 支持增量检查的一次落地经验总结
  7. jsp+servlet实现图片上传
  8. (5)风色从零单排《C++ Primer》 const,typedef,auto,decltype
  9. APPCODE key
  10. python stdout stderr 一起输出_stdout和stderr标准输出的区别