1.lpush + lpop 从左边存,从左边取(先进后出)
-
lrange 按区间取元素
3.rpsh rpop 和 lpsh lpop:
取完数据就是返回 (nil)
-
组合 先进先出
-
先进后出组合
-
redis 集合set类型
Set类型
常用命令:
sadd(向集合中添加元素)、srem(删除集合中的元素)、
smembers(获取集合中的元素)、scard(获取集合中的元素个数)、sismember(判断元素在集合中是否存在)、
srandmember(从集合中随机获取指定个数的元素)、
spop(从集合中随机获取指定个元素并从集合中移除)、
sinter(集合取交集)、sinterstore(集合取交集并存入到指定集合)、
sunion(集合取并集)、sunionstore(集合取并集并存入到指定集合)、
sdiff(集合取差集)、sdiffstore(集合取差集并存入到指定集合)
-
zset 类型
有序集合(zset)就是可以排序的set,通过每个元素关联的score值来为元素进行从小到大的排序,zset中元素不能重复,但是score却可以重复
结果:
python操作redis报错:redis.exceptions.DataError: ZADD allows either 'nx' or 'xx', not both解决方案
一、问题描述
sorted set操作执行:print(connect.zadd('grade', 'bob', 98, 'mike' ,100))时报错redis.exceptions.DataError: ZADD allows either 'nx' or 'xx', not both
二、出现该问题原因
上面的connect.zadd('key','value1','score1','value2','score2')写法是redis-py 3.0之前的版本
在redis-py 3.0版本之后,写法变为:connect.zadd('grade', {'bob':100, 'mike':99, 'lucy':87})这种写法了,所以会报错
三、解决方案
更改写法为:connect.zadd('key',{'value1':'score1','value2':'scote2',.....})
- 实例(异步和同步)
# Redis的有序集合操作命令
# -*- coding: utf-8 -*-
"""
@Time : 2020/6/11 13:38
@Athor : LinXiao
@功能 :
"""
# ------------------------------
import redis
import asyncio
import aioredis
loop = asyncio.get_event_loop()
async def go():
redis = await aioredis.create_redis(
('localhost', 6379), loop=loop)
await redis.set('my-key', 'value')
val = await redis.get('my-key')
print(val)
del1 = await redis.delete('my-key')
redis.close()
await redis.wait_closed()
loop.run_until_complete(go())
def redis_operation():
# 有序集合(zset)
# 就是可以排序的set,通过每个元素关联的score值来为元素进行从小到大的排序,zset中元素不能重复,但是score却可以重复
r=redis.Redis(host="localhost", port=6379)
# 添加元素并排序
# r.zadd("aa",{"v1":11,"v2":22,"v3":111,"v4":2,"v22":242,"v34":11441,"v444":21})
# 删除元素
# r.zrem("aa","v2")
# 返回区间元素并排序 desc=False 时就从小到大取,反之.
# b = r.zrange("aa",0,2,desc=True)
# print(str(b))
# 返回 [b'v4', b'v1', b'v444']
# zcard key:返回key的基数,key不存在时返回0
# b = r.zcard("aa")
# print(b) # 7
# zcount key min max:返回key中score值在min和max之间(包括min和max)的成员的数量
b = r.zrank("aa","v2")
print(b)
# zrank key member:返回key中成员member的排名(从0开始),如果member不是key的成员返回None
# zrevrank key member:返回key中成员member逆序排序(按score值从大到小)后的排名(从0开始)
if __name__ == '__main__':
redis_operation()
网友评论