需求:因键值到期需处理事后工作比如清缓存等.

redis 对象存储碰到复杂对象,存储对象是有问题的, 因为redis 存取的方式是先把对象json 序列化. 取出使用时再编译过来.

也可以理解,毕竟redis 是独立运行的, 至于C# 或者java 对象这些存在内存堆里的东西, 放到redis 内,确实有很多难度和不确定因素.

于是 redis 我使用其到期删除键值功能, 对象只能由字典管理. 但字典需要维护,对象需到期删除,这时需要订阅redis 键值到期事件.根据事件传来的参数,管理c#内的字典内的对象.

1:修改redis 的配置文件 ,redis.conf 修改后无用 ,后又把目录下的redis.windows-service.conf,redis.windows.conf 两个文件都加入了或者覆盖了原配置,至于什么当前环境使用的哪个配置文件,在此就不深究了.

notify-keyspace-events "Ex"

2:重启redis 服务

3:我使用的StackExchange     redis 组件

获取订阅频道号对象.

  DbNum = dbNum;
            _conn = string.IsNullOrWhiteSpace(readWriteHosts) ? ConnectionMultiplexer.Connect(ConfigurationOptions.Parse(DefaultConnectionString)) : ConnectionMultiplexer.Connect(ConfigurationOptions.Parse(readWriteHosts));
         
            ISubscriber subscriber = _conn.GetSubscriber();
            subscriber.Subscribe("__keyevent@0__:expired", (channel, notificationType) =>
            {
                Console.WriteLine(channel + "|" + notificationType);
            });

加上以上进行测试

  RedisHelper.GetInstance().SetString("12356", "ok", new TimeSpan(0,0,20));

20秒后,便可收到事件提醒.

 

posted on 2021-09-22 09:49  小石头的一天  阅读(347)  评论(0编辑  收藏  举报