Redis-Python
-
redis 提供两个类 Redis 和 StrictRedis, StrictRedis 用于实现大部分官方的命令,Redis 是 StrictRedis 的子类,用于向后兼用旧版本。 -
redis 取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串。
import redis
r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.set('name', 'runoob')
print(r['name'])
print(r.get('name'))
print(type(r.get('name')))
使用连接池
import redis
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.set('name', 'runoob')
print(r.get('name'))
Redis基本命令–String
set(name, value, ex=None, px=None, nx=False, xx=False)
ex:过期时间(秒)
px:过期时间(毫秒)
nx:如果设置为True,则只有name不存在时,当前set操作才执行
xx:如果设置为True,则只有name存在时,当前set操作才执行
setnx(name, time, value):设置值,只有name不存在时,执行设置操作(添加)
time:过期时间(数字秒 或 timedelta对象)
psetex(name, time_ms, value):
mset(*args, **kwargs)
mget(keys, *args)
getset(name, value)
getrange(key, start, end)
setrange(name, offset, value)
setbit(name, offset, value)
getbit(name, offset)
bitcount(key, start=None, end=None)
bitop(operation, dest, *keys)
operation - AND(并) 、 OR(或) 、 NOT(非) 、 XOR(异或)
strlen(name)
incr(self, name, amount=1)
amount:自增数(必须是整数)
incrbyfloat(self, name, amount=1.0)
amount - 自增数(浮点型)
decr(self, name, amount=1)
amount:自减数(整数)
append(key, value)
Redis基本命令–Hash
hset(name, key, value)
hmset(name, mapping)
mapping:字典
hmget(name, keys, *args)
keys:要获取key集合,如:['k1', 'k2', 'k3']
*args:要获取的key,如:k1,k2,k3
hgetall(name)
hlen(name)
hkeys(name)
hvals(name)
hexists(name, key)
hdel(name,*keys)
hincrby(name, key, amount=1)
name - redis中的name
key - hash对应的key
amount - 自增数(整数)
hincrbyfloat(name, key, amount=1.0)
amount,自增数(浮点数)
hscan(name, cursor=0, match=None, count=None)
name - redis的name
cursor - 游标(基于游标分批取获取数据)
match - 匹配指定key,默认None 表示所有的key
count - 每次分片最少获取个数,默认None表示采用Redis的默认分片个数
hscan_iter(name, match=None, count=None)
match - 匹配指定key,默认None 表示所有的key
count - 每次分片最少获取个数,默认None表示采用Redis的默认分片个数。
Redis基本命令–List
lpush(name,values)
rpush(name,values)
lpushx(name,value)
rpushx(name,value)
linsert(name, where, refvalue, value)
name - redis的name
where - before or after
refvalue - 标杆值,即:在它前后插入数据
value - 要插入的数据
r.linsert("list2", "before", "11", "00")
r.lset(name, index, value)
r.lrem(name, value, num)
name - redis的name
value - 要删除的值
num - num=0,删除列表中所有的指定值;
num=2 - 从前到后,删除2个, num=1,从前到后,删除左边第1个
num=-2 - 从后向前,删除2个
lpop(name)
ltrim(name, start, end)
lindex(name, index)
rpoplpush(src, dst)
src - 要取数据的列表的 name
dst - 要添加数据的列表的 name
brpoplpush(src, dst, timeout=0)
src - 取出并要移除元素的列表对应的name
dst - 要插入元素的列表对应的name
timeout - 当src对应的列表中没有数据时,阻塞等待其有数据的超时时间(秒),0 表示永远阻塞
blpop(keys, timeout)
keys - redis的name的集合
timeout - 超时时间,当元素所有列表的元素获取完之后,阻塞等待列表内有数据的时间(秒), 0 表示永远阻塞
brpop(keys, timeout)
def list_iter(name):
"""
自定义redis列表增量迭代
:param name: redis中的name,即:迭代name对应的列表
:return: yield 返回 列表元素
"""
list_count = r.llen(name)
for index in range(list_count):
yield r.lindex(name, index)
for item in list_iter('list2'):
print(item)
Redis基本命令–Set
sadd(name,values)
scard(name)
smembers(name)
sscan(name, cursor=0, match=None, count=None)
sscan_iter(name, match=None, count=None)
for i in r.sscan_iter("set1"):
print(i)
sdiff(keys, *args)
sdiffstore(dest, keys, *args)
r.sdiffstore("set3", "set1", "set2")
sinter(keys, *args)
sinterstore(dest, keys, *args)
print(r.sinterstore("set3", "set1", "set2"))
sunion(keys, *args)
sunionstore(dest,keys, *args)
sismember(name, value)
smove(src, dst, value)
r.smove("set1", "set2", 44)
spop(name)
srem(name, values)
Redis基本命令–有序Set
zadd(name, *args, **kwargs)
zcard(name)
r.zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)
name - redis的name
start - 有序集合索引起始位置(非分数)
end - 有序集合索引结束位置(非分数)
desc - 排序规则,默认按照分数从小到大排序
withscores - 是否获取元素的分数,默认只获取元素的值
score_cast_func - 对分数进行数据转换的函数
zrevrange(name, start, end, withscores=False, score_cast_func=float)
print(r.zrevrange("zset1", 0, -1))
print(r.zrevrange("zset1", 0, -1, withscores=True))
zrangebyscore(name, min, max, start=None, num=None, withscores=False, score_cast_func=float)
for i in range(1, 30):
element = 'n' + str(i)
r.zadd("zset3", element, i)
print(r.zrangebyscore("zset3", 15, 25))
print(r.zrangebyscore("zset3", 12, 22, withscores=True))
zrevrangebyscore(name, max, min, start=None, num=None, withscores=False, score_cast_func=float)
zscan(name, cursor=0, match=None, count=None, score_cast_func=float)
zscan_iter(name, match=None, count=None,score_cast_func=float)
zcount(name, min, max)
zincrby(name, value, amount)
zrank(name, value)
zrem(name, values)
zremrangebyrank(name, min, max)
zremrangebyscore(name, min, max)
zscore(name, value)
其他操作
delete(*names)
exists(name)
keys(pattern='')
KEYS * 匹配数据库中所有 key 。
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
KEYS hllo 匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo
expire(name ,time)
rename(src, dst)
randomkey()
type(name)
|