redis 常用API(python)

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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335