Redis 的安装 使用 通知事件
Redis 的安装 使用
-
介绍:
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string、list、set、zset(sorted set)和hash。这些数据类型都支持push/pop、add/remove、取交集、并集和差集及其他更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
-
官网下载 Redis
启动服务 :
-
redis-server
-
启动安装windows 服务:
redis-server --service-install redis.windows.conf
启动服务:
redis-server --service-start
停止服务:
redis-server --service-stop
cmd 操作
redis-cli
使用redis 执行操作redis-cli -raw
启用中文模式 存储和查询 不会出现乱码
python中操作 Redis
-
安装 :
pip install redis
-
使用:
redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,
StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,
Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。
'''''' import redis r = redis.Redis() # 默认连本地 # r = redis.Redis(host='11.12.13.14', port=6379) # 可配置要连接的IP和端口 r.set('name', 'q1mi') print(r.get('name'))
连接池
redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。
'''连接池''' import redis pool = redis.ConnectionPool() r = redis.Redis(connection_pool=pool) r.set('age', 18) print(r.get('age'))
操作 见博客:
在django 中使用redis
-
安装 : pip install django-redis
-
在 django 的settings 中配置 使用缓存 的方式
# CACHE CONF CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100}, # "PASSWORD": "密码", "DECODE_RESPONSES": True } }, }
-
views 视图中使用
import django_redis import json # 创建于本地 内存 redis 的链接 cache = django_redis.get_redis_connection() value = {...} # 设置值 cache.set('key',json.dumps(value)) # 获取值 value = json.loads(cache.get('key'))
redis 的 通知 事件
默认情况下,redis的通知事件是关闭的,在终端执行以下命令开启:
$ redis-cli config set notify-keyspace-events KEA
OK
-
当key 设置了 过期时间 在 python 中 订阅 通知
-
事件循环监听
import time from redis import StrictRedis # 创建 redis 链接 redis = StrictRedis(host='localhost', port=6379) # redis 发布订阅 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)