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

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却可以重复

结果:

一、问题描述

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',.....})

# -*- 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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以使用redis-py库来实现Redis数据迁移。以下是一个简单的示例代码,演示如何从一个Redis实例复制数据到另一个Redis实例。 首先,确保你已经安装了redis-py库。可以使用以下命令来安装: ``` pip install redis ``` 然后,使用以下代码实现数据迁移: ```python import redis def migrate_data(source_host, source_port, source_password, destination_host, destination_port, destination_password): # 连接源Redis source_redis = redis.Redis(host=source_host, port=source_port, password=source_password) # 连接目标Redis destination_redis = redis.Redis(host=destination_host, port=destination_port, password=destination_password) # 获取所有键 keys = source_redis.keys() # 迁移数据 for key in keys: key_type = source_redis.type(key) if key_type == b'string': value = source_redis.get(key) destination_redis.set(key, value) elif key_type == b'list': values = source_redis.lrange(key, 0, -1) for value in values: destination_redis.rpush(key, value) elif key_type == b'set': values = source_redis.smembers(key) for value in values: destination_redis.sadd(key, value) elif key_type == b'zset': values = source_redis.zrange(key, 0, -1, withscores=True) for value, score in values: destination_redis.zadd(key, {value: score}) elif key_type == b'hash': items = source_redis.hgetall(key) for field, value in items.items(): destination_redis.hset(key, field, value) print("数据迁移完成!") # 示例用法 migrate_data('source_host', 6379, 'source_password', 'destination_host', 6379, 'destination_password') ``` 请确保替换示例中的源Redis和目标Redis的主机、端口和密码信息。这段代码会将源Redis中的所有键和对应的值迁移到目标Redis中。 请注意,该示例代码只迁移了常见的Redis数据类型(字符串、列表、集合、有序集合和哈希)。如果你使用了其他数据类型,你需要相应地进行修改。 希望对你有所帮助!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值