https://cloud.tencent.com/developer/article/1347437   python中的Redis键空间通知(过期回调)

set notify-keyspace-events KEA  【KEA参照以下字符进行设置】
此有缺点:最大的缺点是Pub / Sub实现要求发布者和订阅者一直处于启动状态。订阅服务器在停止或连接丢失时会丢失数据。
  【意思:就是如果服务端在意外情况下出现重启或断开,需要重新设置(windows)】
字符 发送通知
K 键空间通知,所有通知以 keyspace@ 为前缀,针对Key
E 键事件通知,所有通知以 keyevent@ 为前缀,针对event
g DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
$ 字符串命令的通知
l 列表命令的通知
s 集合命令的通知
h 哈希命令的通知
z 有序集合命令的通知
x 过期事件:每当有过期键被删除时发送
e 驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送
A 参数 g$lshzxe 的别名,相当于是All
import time
from redis import StrictRedis redis = StrictRedis(host='localhost', port=6379) pubsub = redis.pubsub() def event_handler(msg):
print(msg)
data = msg['channel'].decode().split(':')[1]
print('***',data, redis.get(data)) pubsub.psubscribe(**{'__keyspace@0__:*': event_handler}) print('Starting message loop')
while True:
message = pubsub.get_message()
if message:
print(message)
else:
time.sleep(0.01)

---订阅端

import time
from redis import StrictRedis redis = StrictRedis(host='localhost', port=6379) pubsub = redis.pubsub()
pubsub.psubscribe('__keyspace@0__:*') print('Starting message loop')
while True:
message = pubsub.get_message()
if message:
print(message)
else:
time.sleep(0.01)

--订阅端若不添加回调事件

# python 3.7
import redis
pool = redis.ConnectionPool(host='localhost', port=6379)
r = redis.Redis(connection_pool=pool)
r.execute_command('config set notify-keyspace-events KEA') # 发布端,判断如果是第一次就执行
r.setex('a2',2,'a1')

--发布端


import redis,json,time
r = redis.ConnectionPool(host='127.0.0.1',port=6379)
rw = redis.Redis(connection_pool=r)
for i in range(1,10):
rw.zadd('cookie_pool',json.dumps({'a1':1,'a2':2}),int(time.time()))
time.sleep(1)
print('设置 1个') def alive(time_space=10 * 3):
'''
:param time: 每隔10分钟检测一下
:return:
'''
# 对应 _self.rw.zadd('cookie_pool', json.dumps(d), int(time.time()))
while True:
# 拿到前面的1个,并loads
_ = rw.zrange('cookie_pool', 0, 0)[0] # 拿到分值
score = rw.zscore('cookie_pool', _) print(score,time.time()-score)
# 如果分值大于10分钟,就开始进行验证cook保活
if time.time() - score >= time_space:
# 进行删除
rw.zrem('cookie_pool', _) # 转义第一个集合的值
first_set = json.loads(_.decode()) # 此处调用cook保活验证,,返回 bool,,假设为True
cook_alive = True
if cook_alive:
print('正在设置',first_set)
rw.zadd('cookie_pool', json.dumps(first_set), int(time.time()))
else:
print('已自动删除')
# 什么都不做,自动扔掉
else:
print('检测时间未到')
time.sleep(1)
alive()

----有序集合---用分值判断间隔时间用作不间段保活

redis过期事件回调函数,与有序集合的更多相关文章

  1. tp5模型事件回调函数中不能使用$this

    tp5模型事件回调函数中不能使用$this,使用会报错,涉及到数据库操作使用Db类,不能使用$this->save()之类的方式 如果回调函数中需要使用类内函数,需要将函数定义为static,通 ...

  2. Qt 学习之路 2(19):事件的接受与忽略(当重写事件回调函数时,时刻注意是否需要通过调用父类的同名函数来确保原有实现仍能进行!有好几个例子。为什么要这么做?而不是自己去手动调用这两个函数呢?因为我们无法确认父类中的这个处理函数有没有额外的操作)

    版本: 2012-09-29 2013-04-23 更新有关accept()和ignore()函数的相关内容. 2013-12-02 增加有关accept()和ignore()函数的示例. 上一章我们 ...

  3. vue组件中—bus总线事件回调函数多次执行的问题

    在利用vue组件进行事件监听时发现,如果对N个vue组件实例的bus总线绑定同一事件的回调函数,触发任意组件的对应事件,回调函数至少会被执行N次,这是为什么呢? 为此,调研了普通对象的事件绑定和触发实 ...

  4. Redis常用命令入门5:有序集合类型

    有序集合类型 上节我们一起学习了集合类型,感受到了redis的强大.现在我们接着学Redis的最后一个类型——有序集合类型. 有序集合类型,大家从名字上应该就可以知道,实际上就是在集合类型上加了个有序 ...

  5. Redis自学笔记:3.6入门-有序集合类型

    3.6有序集合类型 3.6.1介绍 在集合类型基础上,为集合中每个元素都关联了一个分数,故可以获得 分数最高(最低)的前N个元素,可以获得指定范围内的元素等 有序集合中每个元素不同,但它们的分数却可以 ...

  6. redis过期事件

    背景:目前在商城项目,订单有过期逻辑,小伙伴提议用redis做,经讨论分析,redis有key的过期事件,貌似可以实现,但是咨询大神,好像不建议这样用,可能会丢数据 随便写了段python代码测试 i ...

  7. Redis学习笔记(六)有序集合进阶

    1.基础操作 ZCARD(获取成员数量) ZINCRBY key_name num member(将member的分数加num) ZCOUNT key_name min max(获取分数在min与ma ...

  8. Redis 四:存储类型之有序集合

    有序集合似乎更大的操作是由于加了一个叫做“分子”的东西 事实上就好像普通的数据,只是为这个数据加了一个纯数字的标识, 通过操作这些标识来得到我们想要的数据! 分子可以是整形,也可以是双精度浮点型: = ...

  9. 如何使用onclick方式添加多个事件回调函数

    通过给onclcik包裹一个函数进行上下文的切换与参数的传递: function addClcikEvent(el, fn){ if(el.onclick){ var _back = el.oncli ...

随机推荐

  1. Sq常用操作

    sql创建表实例: CREATE TABLE mytable( id varchar(40) NOT NULL default '', userId varchar(40) NOT NULL defa ...

  2. 【翻译】Flink window

    本文翻译自flink官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/stream/operators/window ...

  3. Swift编码总结1

    1. fileprivate (set) var hasSetDiscount = false中fileprivate (set)表示什么意思: //设置setter私有,但是getter为publi ...

  4. 【编程基础】CppLint工具使用过程

    前言 coding最好要形成一定的编程风格,一般常用的开源风格有google code style,可以使用cpplint工具检查是否符合该编程风格. 目录 1. linux系统使用过程: 2. wi ...

  5. Python3之内建模块hashlib

    摘要算法简介 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串( ...

  6. 【Tools】三款笔记本电脑硬件检测工具-官网下载

    一.CPU-Z 下载地址: https://www.cpuid.com/softwares/cpu-z.html 描述: CPU-Z已经是大名鼎鼎了.这里就不多说了.  二.Cinebench   下 ...

  7. 【深度学习与神经网络】深度学习的下一个热点——GANs将改变世界

    本文作者 Nikolai Yakovenko 毕业于哥伦比亚大学,目前是 Google 的工程师,致力于构建人工智能系统,专注于语言处理.文本分类.解析与生成. 生成式对抗网络-简称GANs-将成为深 ...

  8. 【GStreamer开发】GStreamer播放教程06——可视化音频

    目标 GStreamer有一系列把音频转换成视频的element.他们可以用于科学的目的或者增加音乐播放器的趣味性.本教程展示: 如何允许音频的可视化 如何选择可视化element 介绍 在playb ...

  9. 安装本地 jar 文件

    Maven 提供了 maven-install-plugin 可将 jar 文件安装至本地 repository.安装命令如下: mvn install:install-file -Dfile= -D ...

  10. Django orm练习

    ORM练习题 models生成 from django.db import models # Create your models here. # 书籍管理 class Book(models.Mod ...