redis 常用API(python)
[参考runoob](https://www.runoob.com/redis/server-dbsize.html)
通用 API
使用 keys 查询所有键
keys = redis.keys()
使用 type 查看 结构类型
keys = redis.keys()
for key in keys:
log.info(redis.type(key))
使用 dbsize 查看当前数据库key的数量
log.info(redis.dbsize())
使用 exists 查看键是否存在,可以查询多个,返回存在的个数,所以返回的值为0时表示都不存在
log.info(redis.exists('world'))
使用 del 删除键,python 提供的API是 delete
redis.append('test','test_value')
log.info(redis.get('test'))
log.info(redis.exists('test'))
redis.delete('test')
log.info(redis.exists('test'))
使用 expire 为键设置过期时间,单位是 秒
redis.expire('test',10)
time.sleep(5)
log.info(redis.exists('test'))
time.sleep(6)
log.info(redis.exists('test'))
使用 ttl 查询剩余的过期时间, -1 表示没有设置过期时间, -2 表示键不存在
redis.expire('test',10)
time.sleep(5)
log.info(redis.ttl('test'))
time.sleep(6)
log.info(redis.exists('test'))
使用 object encoding 查看键对应的内部编码
log.info(redis.object('encoding','hello'))
字符串 API
使用 set 进行添加或者更新
# set key value [ex seconds] [px milliseconds] [nx|xx]
# ex 设置秒级别的过期时间
# px 设置毫秒级别的过期时间
# nx 键不存在才能设置成功,用于添加
# xx 键存在才能设置成功,用于修改
# python 对应 API
def set(self, name, value, ex=None, px=None, nx=False, xx=False)
使用 get 获取字符串的值
log.info(redis.get('hello'))
使用 mset 批量设置值
# python 中对应的 API ,mapping 在 python 中的是实现是 dict
def mset(self, mapping)
使用 mget 批量获取值
# 参数可以是多个 key
def mget(self, keys, *args)
log.info(redis.mget('hello','world'))
使用 incr 进行自增
# 不是整数返回错误,不存在则是默认值,某则进行递增
def incr(self, name, amount=1)
# 针对浮点数的操作
def incrbyfloat(self, name, amount=1.0)
12345
使用 append 追加值
def append(self, key, value)
使用 strlen 返回字符串的长度
def strlen(self, name)
使用 getset 设置并返回原来的值
def getset(self, name, value)
使用 setrange 修改指定位置的字符
def setrange(self, name, offset, value)
使用 getrange 获取指定范围的字符串
def getrange(self, key, start, end)
哈希 API
使用 hset 设置 一对 field-value(键值对)
def hset(self, name, key, value)
使用 hget 获取值
def hget(self, name, key)
使用 hdel 删除 field
def hdel(self, name, *keys)
使用 hlen 计算 field 的个数
def hlen(self, name)
使用 hmget 批量获取
def hmget(self, name, keys, *args)
使用 hmset 批量设置
def hmset(self, name, mapping)
使用 hexists 判断 field 是否存在
def hexists(self, name, key)
使用 hkeys 获取所有的 field
def hkeys(self, name)
使用 hvals 获取所有的 value
def hvals(self, name)
使用 hgetall 获取所有的 field-value
# 返回一个 dict
def hgetall(self, name)
使用 hincrby 和 hincrbyfloat 对 field 进行计算操作
def hincrby(self, name, key, amount=1)
def hincrbyfloat(self, name, key, amount=1.0)
使用 hstrlen 计算 value 的长度
def hstrlen(self, name, key)
列表 API
使用 rpush 从列表右边插入元素
def rpush(self, name, *values)
# 如果列表不存在操作无效
def rpushx(self, name, value)
使用 lpush 从列表左边插入元素
def lpush(self, name, *values)
def lpushx(self, name, value)
使用 linsert 在某个元素的前或者后插入元素
# where 有 before 和 after 两种选择,如果有多个相同值,则只对第一个符合的 refvalue 位置进行操作
def linsert(self, name, where, refvalue, value)
使用 lrange 获取范围内的元素
# 0 是开始位置,-1 是结束位置
def lrange(self, name, start, end)
使用 lindex 获取指定下标元素
def lindex(self, name, index)
使用 llen 获取列表长度
def llen(self, name)
使用 lpop 从左侧弹出元素
def lpop(self, name)
使用 rpop 从列表右侧弹出元素
def rpop(self, name)
使用 lrem 删除指定 value 元素
# 对于 count 的说明,count > 0 ,表示从左到右开始删除 count 个
# count < 0 , 表示 从右到左开始删除 count 个
# count = 0 , 表示 删除所有
def lrem(self, name, count, value)
使用 ltrim 按照索引范围修剪列表
# 只会留下 start 到 end 范围的元素
def ltrim(self, name, start, end)
使用 lset 对下标元素进行修改
def lset(self, name, index, value)
使用 blpop 和 brpop 进行阻塞弹出( 常用于消息队列的实现 )
# 如果队列为空,且timeout为0,则会一直阻塞下去,知道有元素弹出为止,如果 timeout 不为 0,则会阻塞指定时间,除非列表有元素可以弹出
def blpop(self, keys, timeout=0)
def brpop(self, keys, timeout=0)
集合 API
使用 sadd 添加元素
def sadd(self, name, *values)
使用 srem 删除元素
def srem(self, name, *values)
使用 scard 计算元素个数
def scard(self, name)
使用 sismember 判断元素是否在集合中
def sismember(self, name, value)
使用 srandmember 随机返回指定个数的集合
def srandmember(self, name, number=None)
使用 spop 随机 弹出 指定个数元素( 弹出的元素会从集合中删除 )
def spop(self, name, count=None)
使用 smembers 获取所有元素
def smembers(self, name)
使用 sinter 获取多个集合之间的交集
def sinter(self, keys, *args)
# 将结果保存到 name 为 dest(参数) 的集合中
def sinterstore(self, dest, keys, *args)
使用 sunion 获取多个集合之间的并集
def sunion(self, keys, *args)
# 将结果保存到 name 为 dest(参数) 的集合中
def sunionstore(self, dest, keys, *args)
使用 sdiff 获取多个集合之间的差集
def sdiff(self, keys, *args)
# 将结果保存到 name 为 dest(参数) 的集合中
def sdiffstore(self, dest, keys, *args)
有序集合 API
使用 zadd 添加成员
# python api 中 这里的 score 和 value 需要封装成 mapping ,也就是 dict
# {str(value):float(score)} 对应 mapping
# nx 用于添加
# xx 用于修改
# ch 返回此次操作有序集合元素和分数变化的个数
# incr 对 score 添加
def zadd(self, name, mapping, nx=False, xx=False, ch=False, incr=False)
使用 zcard 返回成员个数
def zcard(self, name)
使用 zscore 返回成员的分数
def zscore(self, name, value)
使用 zrank 和 zrevrank 计算成员的排名
# 升序,使用 withscores 同时返回分数
def zrank(self, name, value)
# 降序
def zrevrange(self, name, start, end, withscores=False,score_cast_func=float)
使用 zrem 删除成员
def zrem(self, name, *values)
使用 zincrby 添加成员分数
def zincrby(self, name, amount, value)
使用 zrange 和 zrevrange 返回指定排名范围的成员
def zrange(self, name, start, end, desc=False, withscores=False,score_cast_func=float)
def zrevrange(self, name, start, end, withscores=False,score_cast_func=float)
使用 zrangebyscore 和 zrevrangebyscore 返回指定分数的成员
def zrangebyscore(self, name, min, max, start=None, num=None,withscores=False, score_cast_func=float)
def zrevrangebyscore(self, name, max, min, start=None, num=None,withscores=False, score_cast_func=float)
使用 zcount 返回指定分数范围的成员个数
def zcount(self, name, min, max)
使用 zremrangebyrank 删除指定范围内的升序成员
def zremrangebyrank(self, name, min, max)
使用 zremrangebyscore 删除指定分数范围内的成员
def zremrangebyscore(self, name, min, max)
使用 zinterstore 对多个有序集合进行交集操作
# aggregate 可以对分数进行聚合操作
def zinterstore(self, dest, keys, aggregate=None)
使用 zunionstore 对多个有序集合进行并集操作
def zunionstore(self, dest, keys, aggregate=None)
键管理 API
使用 rename 或 renamenx 对键进行重命名
# 将 src 改为 dst
def rename(self, src, dst)
# 只有当 dst 不存在时操作才能成功,这个 api 更安全一些
def renamenx(self, src, dst)
使用 randomkey 随机返回一个键
def randomkey(self)
使用 **expire expireat pexpire pexpireat ttl pttl ** 都是针对键过期的 API
# 指定经过多长时间过期,秒级别
def expire(self, name, time)
# 指定经过多长时间过期,毫秒级别
def pexpire(self, name, time)
# 指定到对应的时间戳过期,秒级别
def expireat(self, name, when)
#指定到对应的时间戳过期,毫秒级别
def pexpireat(self, name, when)
# 查询过期剩余时间,秒级别
def ttl(self, name)
# 查询过期剩余时间,毫秒级别
def pttl(self, name)
使用 keys 和 scan 进行遍历所有键
# pattern 是使用 glob 风格的通配符
def keys(self, pattern='*')
# cursor 游标开始位置,match等同于 pattern,count 表示每次遍历的数量,第一次遍历 cursor 从 0 开始,当 cursor 再次变为 0 时,表示遍历结束相比于 keys 可以更好的防止阻塞的情况,不过 scan 不能保证遍历到所有的键
def scan(self, cursor=0, match=None, count=None)
数据迁移 API
使用 move 针对 redis 内部进行数据迁移
# 将某个键迁移到对应数据库
def move(self, name, db)
使用 dump + restore 实现在不同的 redis 之间进行数据迁移
# 使用 dump 对 key 进行序列化
def dump(self, name)
# 使用 restore 对 key 进行反序列化
def restore(self, name, ttl, value, replace=False)
使用 migrate 进行reids数据迁移,具有原子性
# host 目标 redis 的主机
# port 目标 reids 的端口
# keys 要迁移的数据
# destination_db 目标数据库的索引
# timeout 迁移的超时时间
# copy 如果是 True 则迁移以后不删除源 reids 的数据
# replace 如果目标 redis 已经有对应 key 的数据,是否进行覆盖
# auth 目标主机的密码
def migrate(self, host, port, keys, destination_db, timeout,copy=False, replace=False, auth=None)
数据库操作 API
使用 swapdb 交换两个数据库数据,redis 中的数据库不是按照数据库名来区分,而是使用索引数字,比如有16个数据库,0表示第一个,15表示最后一个
def swapdb(self, first, second)
使用 flushdb 和 flushall 清除数据库
def flushdb(self, asynchronous=False)
def flushall(self, asynchronous=False)