redis空间键详解
前言
redis的空间键通知是在2.8.0版本以后加入的,客户端通过发布订阅的方式,订阅某个频道,接收通过某种方式影响redis中数据的事件.
目录:
1.空间键事件分类
2.如何启用redis的空间键通知
3.命令行操作示例
4.ioredis操作示例
1.空间键事件分类
每一个影响redis数据空间的操作,都会产生两种事件,分别是key-space和key-event事件
key-space是用来接收影响redis数据空间的操作的名称,如set, lpush
key-event是用来接收受影响的键值名称
2.如何启用redis的空间键通知
为了减少cpu性能的损耗,redis的空间键通知默认是关闭的(notify-keyspace-events为空),可以通过如下方式启用redis空间键通知:
1)修改redis.conf中notify-keyspace-events的值,如:notify-keyspace-events 'K$'
2)通过config set命令设置notify-keyspace-events的值,如:config set notify-keyspace-events 'K$'
notify-keyspace-events的值为空,表示禁用空间键通知,若为非空,则启用该功能,非空可以由多个特定的字符组成,这些字符的含义如下:
K Keyspace events, published with __keyspace@<db>__ prefix. 表示启用key-space事件
E Keyevent events, published with __keyevent@<db>__ prefix. 表示启用key-event事件
g 一般性的指令,比如del(删除),expire(过期),rename(重命名)
$ 字符特定串命令
l 列表特定命令
s 集合特定命令
h hash特定命令
z 有序集合特定命令
x 过期事件
e 驱逐事件
A g$lshzxe的别名
例如设置notify-keyspace-events 'Kl' 表示仅仅对列表命令响应key-space事件(不响应key-event事件)
3.命令行操作示例
首先设置notify-keyspace-events 'K$'
在客户端A上执行:
127.0.0.1:6379> psubscribe __keyspace*@0__:test
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "__keyspace*@0__:test"
3) (integer) 1
在客户端B上执行:
127.0.0.1:6379> set test 1
OK
则在客户端A上会输出:
1) "pmessage"
2) "__keyspace*@0__:test"
3) "__keyspace@0__:test"
4) "set"
可见客户端A收到了key-space事件,而这个事件是通过客户端B set test 1产生的
4.ioredis操作示例
客户端A:
const Redis = require('ioredis')
const Koa = require('koa')
let app = new Koa()
let client = new Redis({host: 'localhost', port: 6379})
app.use(function* (next) {
client.setex('test:1111', 5, 'qqq')
})
app.listen(3000)
客户端B:
const Koa = require('koa')
const Redis = require('ioredis')
const co = require('co')
let app = new Koa()
let client = new Redis({host: 'localhost', port: 6379})
let client2 = client.duplicate();
client.psubscribe('__keyspace@0__:test:*')
client.on('pmessage', function (event, data, data1) {
let ttt = function* () {
let data2 = yield client2.get('qqqq')
}
co(ttt)
})
app.listen(3001)
client.psubscribe('__keyspace@0__:test:*') 匹配所有对test:开头的键的操作
注意: 这里如果想要使用redis的普通指令,则需要重新生成一个redis实例,这里可以通过client.duplicate()来生成一个配置相同的redis实例
分别启动客户端A和客户端B,在浏览器中输入localhost:3000,可以看到客户端B输出如下信息:
__keyspace@0__:test:*
__keyspace@0__:test:1111
set
redis空间键详解的更多相关文章
- Redis AOF 持久化详解
Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.但是一旦进程退出,Redis 的数据就会丢失. 为了解决这个问题,Redis 提供了 RDB 和 ...
- [转]Reids配置文件redis.conf中文详解
转自: Reids配置文件redis.conf中文详解 redis的各种配置都是在redis.conf文件中进行配置的. 有关其每项配置的中文详细解释如下: 对应的中文版解释redis.conf # ...
- [转]Redis内部数据结构详解-sds
本文是<Redis内部数据结构详解>系列的第二篇,讲述Redis中使用最多的一个基础数据结构:sds. 不管在哪门编程语言当中,字符串都几乎是使用最多的数据结构.sds正是在Redis中被 ...
- Python操作redis字符串(String)详解 (三)
# -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1.SET 命令用于设置 ...
- 探索Redis设计与实现6:Redis内部数据结构详解——skiplist
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- 探索Redis设计与实现7:Redis内部数据结构详解——intset
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- 探索Redis设计与实现5:Redis内部数据结构详解——quicklist
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- 探索Redis设计与实现4:Redis内部数据结构详解——ziplist
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- 探索Redis设计与实现3:Redis内部数据结构详解——sds
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
随机推荐
- 在虚拟机中的Ubuntu搭建java开发环境
前提: 安装好虚拟机 在虚拟机中装好了Ubuntu系统 以上两步请参见我的博客(python进阶) 1 安装JDK 1.1 到官网下载jdk压缩包并保存在本地 jdk1.8:点击前往 1.2 在Ubu ...
- Entity Framework Code-First(9.8):DataAnnotations - Column Attribute
DataAnnotations - Column Attribute: Column attribute can be applied to properties of a class. Defaul ...
- 6.docker常用命令
docker 常见命令 更细的配置请参考官方文档 第一大部分容器生命周期管理 01 .docker run :创建一个新的容器并运行一个命令 $ docker run [OPTIONS] IMAGE ...
- POJ 3693 Maximum repetition substring (后缀数组+RMQ)
题意:给定一个字符串,求其中一个由循环子串构成且循环次数最多的一个子串,有多个就输出最小字典序的. 析:枚举循环串的长度ll,然后如果它出现了两次,那么它一定会覆盖s[0],s[ll],s[ll*2] ...
- 关闭QtCreator的vim风格编辑模式
今天不小心点到了键盘的快捷键Alt+V,使QtCreator进入了vim风格编辑模式,导致快捷键拷贝粘贴都不正常,找了下资料才发现是这个问题.具体操作如下: 打开QtCreator去掉下列位置的勾选或 ...
- 【转】log4j.properties 详解与配置步骤 - edward0830ly的专栏 - 博客频道 - CSDN.NET
一.log4j.properties 的使用详解 1.输出级别的种类 ERROR.WARN.INFO.DEBUGERROR 为严重错误 主要是程序的错误WARN 为一般警告,比如session丢失IN ...
- win10外接显示器时有些应用和里面的字体显示比较模糊
打开系统设置 - 选择显示 - 选中外接的显示器 - 点击 "高级缩放设置" 进去后将 "允许 Windows 尝试修改应用,使其不模糊"打开,然后关闭应用再 ...
- 51nod1419 【数学】
思路: n<=3,就是n. 考虑n>3: 我们可以轻松证明n,n-1这两个数互质: 设gcd(n,n-1)=g,n=g*k1,n-1=g*k2; n-(n-1)=g(k1-k2)=1; 所 ...
- BadBoy录制模式:Request 和 Navigation比较
[前言] 今天来为大家介绍下BadBoy录制模式: Request 和 Navigation的比较! 如果您的电脑还未安装BadBoy这款工具的话,可以参考下BadBoy安装步骤和简单介绍:http: ...
- 为CentOS下的Docker安装配置python3【转】
* 安装python3以及docker yum install docker docker pull centos service docker start systemctl enable dock ...