美文网首页Python
redis增删改查 常用数据结构的python操作

redis增删改查 常用数据结构的python操作

作者: 程序里的小仙女 | 来源:发表于2020-06-19 14:53 被阅读0次

    参考:redis常用数据结构以及使用场景举例

    1.lpush + lpop 从左边存,从左边取(先进后出)


    1. lrange 按区间取元素


    3.rpsh rpop 和 lpsh lpop:
    取完数据就是返回 (nil)


    • 组合 先进先出



    • 先进后出组合


    1. redis 集合set类型
      Set类型


    常用命令:

    sadd(向集合中添加元素)、srem(删除集合中的元素)、
    smembers(获取集合中的元素)、scard(获取集合中的元素个数)、sismember(判断元素在集合中是否存在)、
    srandmember(从集合中随机获取指定个数的元素)、
    spop(从集合中随机获取指定个元素并从集合中移除)、
    sinter(集合取交集)、sinterstore(集合取交集并存入到指定集合)、
    sunion(集合取并集)、sunionstore(集合取并集并存入到指定集合)、
    sdiff(集合取差集)、sdiffstore(集合取差集并存入到指定集合)
    
    1. 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',.....})

    1. 实例(异步和同步)
      # 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()
    

    相关文章

      网友评论

        本文标题:redis增删改查 常用数据结构的python操作

        本文链接:https://www.haomeiwen.com/subject/dpjvxktx.html