6、redis基本命令 set
1.新增
sadd(name,values)
name对应的集合中添加元素
2.获取元素个数 类似于len
scard(name)
获取name对应的集合中元素个数
3.获取集合中所有的成员
smembers(name)
获取name对应的集合的所有成员
获取集合中所有的成员--元组形式
sscan(name, cursor=0, match=None, count=None)
获取集合中所有的成员--迭代器的方式
sscan_iter(name, match=None, count=None)
同字符串的操作,用于增量迭代分批获取元素,避免内存消耗太大
4.差集
sdiff(keys, *args)
在第一个name对应的集合中且不在其他name对应的集合的元素集合
5.差集--差集存在一个新的集合中
sdiffstore(dest, keys, *args)
获取第一个name对应的集合中且不在其他name对应的集合,再将其新加入到dest对应的集合中
6.交集
sinter(keys, *args)
获取多一个name对应集合的交集
7.交集--交集存在一个新的集合中
sinterstore(dest, keys, *args)
获取多一个name对应集合的并集,再将其加入到dest对应的集合中
并集
sunion(keys, *args)
获取多个name对应的集合的并集
并集--并集存在一个新的集合
sunionstore(dest,keys, *args)
获取多一个name对应的集合的并集,并将结果保存到dest对应的集合中
8.判断是否是集合的成员 类似in
sismember(name, value)
检查value是否是name对应的集合的成员,结果为True和False
9.移动
smove(src, dst, value)
将某个成员从一个集合中移动到另外一个集合
10.删除--随机删除并且返回被删除值
spop(name)
从集合移除一个成员,并将其返回,说明一下,集合是无序的,所有是随机删除的
11.删除--指定值删除
srem(name, values)
在name对应的集合中删除某些值
Set操作,Set集合就是不允许重复的列表,本身是无序的
有序集合,在集合的基础上,为每元素排序;元素的排序需要根据另外一个值来进行比较,
所以,对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序。
1.新增
zadd(name, *args, **kwargs)
在name对应的有序集合中添加元素
如:
2.获取有序集合元素个数 类似于len
zcard(name)
获取name对应的有序集合元素的数量
3.获取有序集合的所有元素
r.zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)
按照索引范围获取name对应的有序集合的元素
参数:
name,redis的name
start,有序集合索引起始位置(非分数)
end,有序集合索引结束位置(非分数)
desc,排序规则,默认按照分数从小到大排序
withscores,是否获取元素的分数,默认只获取元素的值
score_cast_func,对分数进行数据转换的函数
3-1 从大到小排序(同zrange,集合是从大到小排序的)
zrevrange(name, start, end, withscores=False, score_cast_func=float)
3-2 按照分数范围获取name对应的有序集合的元素
zrangebyscore(name, min, max, start=None, num=None, withscores=False, score_cast_func=float)
3-3 按照分数范围获取有序集合的元素并排序(默认从大到小排序)
zrevrangebyscore(name, max, min, start=None, num=None, withscores=False, score_cast_func=float)
3-4 获取所有元素--默认按照分数顺序排序
zscan(name, cursor=0, match=None, count=None, score_cast_func=float)
3-5 获取所有元素--迭代器
zscan_iter(name, match=None, count=None,score_cast_func=float)
4.zcount(name, min, max)
获取name对应的有序集合中分数 在 [min,max] 之间的个数
5.自增
zincrby(name, value, amount)
自增name对应的有序集合的 name 对应的分数
6.获取值的索引号
zrank(name, value)
获取某个值在 name对应的有序集合中的索引(从 0 开始)
更多:
zrevrank(name, value),从大到小排序
7.删除--指定值删除
zrem(name, values)
删除name对应的有序集合中值是values的成员
8.删除--根据排行范围删除,按照索引号来删除
zremrangebyrank(name, min, max)
根据排行范围删除
9.删除--根据分数范围删除
zremrangebyscore(name, min, max)
根据分数范围删除
10.获取值对应的分数
zscore(name, value)
获取name对应有序集合中 value 对应的分数
1.删除
delete(*names)
根据删除redis中的任意数据类型(string、hash、list、set、有序set)
2.检查名字是否存在
exists(name)
检测redis的name是否存在,存在就是True,False 不存在
3.模糊匹配
keys(pattern='')
根据模型获取redis的name
更多:
KEYS * 匹配数据库中所有 key 。
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
KEYS hllo 匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo
4.设置超时时间
expire(name ,time)
为某个redis的某个name设置超时时间
5.重命名
rename(src, dst)
对redis的name重命名
6.随机获取name
randomkey()
随机获取一个redis的name(不删除)
7.获取类型
type(name)
获取name对应值的类型
8.查看所有元素
scan(cursor=0, match=None, count=None)
9.查看所有元素--迭代器
scan_iter(match=None, count=None)
other 方法
print(r.get('name')) # 查询key为name的值 r.delete("gender") # 删除key为gender的键值对 print(r.keys()) # 查询所有的Key print(r.dbsize()) # 当前redis包含多少条数据 r.save() # 执行"检查点"操作,将数据写回磁盘。保存时阻塞 # r.flushdb() # 清空r中的所有数据管道(pipeline)
redis默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,
如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。
管道(pipeline)是redis在提供单个请求中缓冲多条服务器命令的基类的子类。它通过减少服务器-客户端之间反复的TCP数据库包,从而大大提高了执行批量命令的功能。
import redis import time pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) # pipe = r.pipeline(transaction=False) # 默认的情况下,管道里执行的命令可以保证执行的原子性,执行pipe = r.pipeline(transaction=False)可以禁用这一特性。 # pipe = r.pipeline(transaction=True) pipe = r.pipeline() # 创建一个管道 pipe.set('name', 'jack') pipe.set('role', 'sb') pipe.sadd('faz', 'baz') pipe.incr('num') # 如果num不存在则vaule为1,如果存在,则value自增1 pipe.execute() print(r.get("name")) print(r.get("role")) print(r.get("num"))管道的命令可以写在一起,如:
pipe.set('hello', 'redis').sadd('faz', 'baz').incr('num').execute() print(r.get("name")) print(r.get("role")) print(r.get("num"))