Redis是一个非关系型数据库
基本操作
- 连接
import redis # conn = redis.Redis(host='localhost', port=6379) pool = redis.ConnectionPool(host='localhost', port=6379) conn = redis.Redis(connection_pool=pool) - 是否存在
exists(key) - 删除
delete(*keys) - 设置超时时间
expire(key, time) # 秒 expireat(key, extime) # 具体时间
五种数据类型
string
字符串value最多是512M
- 新增(修改)
set(key, value) - 查询
get(key, value)
hash
- 新增(修改)
hset(key, field, value) # 单个 hmset(key, {field:value,}) # 单个 - 查询
hget(key, field) # 单个 hmget(key, [*field]) # 单个 hgetall(key) # 所有 - 删除
hdel(key, [*field])
list
list通过链表实现
- 新增
lpushx(key, value) # 添加多个到左边 lpush(key, value1, value2) # 添加多个到左边 rpushx(key, value) # 添加多个到右边 rpush(key, value1, value2) # 添加多个到右边 - 查询
lpop(key) # 弹出最左边的并返回 lindex(key, index) # 根据索引返回 lrange(key, start, end) # 根据[start,end]返回 - 删除
lrem(key, value, num) # num=0,删除列表中所有的指定值 ltrim(key, start, end) # 删除[start,end]之外的 - 修改
lset(key, index, value) # 修改指定索引的值
set
set无重复key,通过哈希表实现,所以添加、删除、查找的复杂度都是O(1)
- 新增
sadd(key, value1, value2) - 查询
smembers(key) # 获取集合的所有成员
sort set
sort set无重复member,按score从小到大排列
- 新增
zadd(key, {member:score}) - 查询
zscore(key, member) # 获取member对应分数 # 按照索引范围,默认升序、无分数、浮点 zrange(key, start, end, desc=False, withscores=False, score_cast_func=float) zcount(key, min, max) # 获取分数在[min,max]间的个数 zrank(key, member) # 获取member的索引
管道
- 原子性操作,多个操作须全部成功,失败一个便回滚
# transaction=True开启事务 pipe = r.pipeline(transaction=True) pipe.set('name', 'a') # 操作一 pipe.set('age', '1') # 操作二 pipe.execute()
发布订阅
- 发布
conn.publish('a', '1') - 订阅
# 多个订阅者同时收到相同消息 pub=conn.pubsub() # 订阅某个key pub.subscribe("a") # 初次监听,会有一个测试数据 pub.parse_response() while True: msg = pub.parse_response() print(msg)
文档信息
- 本文作者:Weikang Yu
- 本文链接:https://AccelYu.github.io/2020/09/15/redis_one/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)