Redis 数据变化通知服务实践
2017-05-10 16:54
429 查看
从Redis 2.8.0版本起,Redis加入了“Keyspace notifications”(即“键空间通知”)的功能。键空间通知,允许Redis客户端从“发布/订阅”通道中建立订阅关系,以便客户端能够在Redis中的数据因某种方式受到影响时收到相应事件。
可能接收到的事件举例如下:
影响一个给出的键的所有命令(会告诉你哪个键被执行了一个命令,这个命令是什么);
接收到了一个LPUSH操作的所有键(LPUSH命令:key v1 [v2 v3..]将指定的所有值从左到右进行压栈操作,形成一个栈,并将该栈命名为指定的key);
在数据库0中失效的所有键(不一定非得是数据库0,这里这样表述其实想表达可以知道影响的哪个数据库)。
详细信息请参考:https://redis.io/topics/notifications
下面是动手实验环节:
1.准备Redis环境。找到Redis.conf配置文件,搜索Notify找到下面内容。红色标注是开启了所有通知。大家可以根据实际情况进行筛选,具体情况可以看解释,但是K、E参数必须有一个,否则就没有通知。
2.通过命令行启动Redis Server:Redis-server.exe redis.conf
3.编写一个C#程序,监控事件变化,主要代码如下,采用了ServiceStack组件,此组件可从github获取:https://github.com/ServiceStack/ServiceStack.Redis 。编译并运行。
class Program
{
static void Main(string[] args)
{
ServiceStack.Redis.RedisClient client = new ServiceStack.Redis.RedisClient("127.0.0.1", 6379);
ServiceStack.Redis.RedisSubscription sub = new ServiceStack.Redis.RedisSubscription(client);
sub.OnMessage += ShowMessage;
//订阅过期时间、set命令
sub.SubscribeToChannels("__keyevent@0__:expired", "__keyevent@0__:set");
Console.ReadLine();
}
static void ShowMessage(string a, string b)
{
Console.WriteLine("{0},{1}", a, b);
}
}
4.打开redis安装包中的redis client,自动连接127.0.01:6379端口上的Redis Server,输入下面指令后,可以看到C#程序接收到了时间通知。
Set Name 张三
通过上面功能,可以简单实现Redis数据的变更通知了。
可能接收到的事件举例如下:
影响一个给出的键的所有命令(会告诉你哪个键被执行了一个命令,这个命令是什么);
接收到了一个LPUSH操作的所有键(LPUSH命令:key v1 [v2 v3..]将指定的所有值从左到右进行压栈操作,形成一个栈,并将该栈命名为指定的key);
在数据库0中失效的所有键(不一定非得是数据库0,这里这样表述其实想表达可以知道影响的哪个数据库)。
详细信息请参考:https://redis.io/topics/notifications
下面是动手实验环节:
1.准备Redis环境。找到Redis.conf配置文件,搜索Notify找到下面内容。红色标注是开启了所有通知。大家可以根据实际情况进行筛选,具体情况可以看解释,但是K、E参数必须有一个,否则就没有通知。
2.通过命令行启动Redis Server:Redis-server.exe redis.conf
3.编写一个C#程序,监控事件变化,主要代码如下,采用了ServiceStack组件,此组件可从github获取:https://github.com/ServiceStack/ServiceStack.Redis 。编译并运行。
class Program
{
static void Main(string[] args)
{
ServiceStack.Redis.RedisClient client = new ServiceStack.Redis.RedisClient("127.0.0.1", 6379);
ServiceStack.Redis.RedisSubscription sub = new ServiceStack.Redis.RedisSubscription(client);
sub.OnMessage += ShowMessage;
//订阅过期时间、set命令
sub.SubscribeToChannels("__keyevent@0__:expired", "__keyevent@0__:set");
Console.ReadLine();
}
static void ShowMessage(string a, string b)
{
Console.WriteLine("{0},{1}", a, b);
}
}
4.打开redis安装包中的redis client,自动连接127.0.01:6379端口上的Redis Server,输入下面指令后,可以看到C#程序接收到了时间通知。
Set Name 张三
通过上面功能,可以简单实现Redis数据的变更通知了。
相关文章推荐
- SOA最佳实践之构建数据服务层
- 当ContentProvider中的数据发生变化时可以向其他用户发出通知
- [转载]微服务实践(五):微服务的事件驱动数据管理
- 微服务实践(五):微服务的事件驱动数据管理
- 微服务实践(五):微服务的事件驱动数据管理
- Flex 实践——在 Datagrid中及时显示Array的数据变化
- Redis实践操作之—— keyspace notification(键空间通知)
- redis服务启动关闭以及其他命令实践
- 使用SqlDependency监听MSSQL数据库表变化通知
- 基于Redis、Storm的实时数据查询实践
- ListView数据改变时要通知数据变化
- Redis缓存服务搭建及实现数据读写
- Redis缓存服务搭建及实现数据读写
- mysql表数据发生变化时,主动通知业务系统(mysql-udf-http)
- 【Redis 2】Redis数据库的学习与实践—redis的数据类型
- Adhesive框架系列文章--Mongodb数据服务使用实践
- Redis缓存服务搭建及实现数据读写
- 我的android 第26天 - 当ContentProvider中数据发生变化时向其用户发出通知
- [转载]微服务实践(五):微服务的事件驱动数据管理
- Redis持久化实践及数据恢复