Python操作redis(二)hash类型

11 篇文章 0 订阅


■ 写在前面:

    前面讲的基本的键值对操作,好处是方便,高效。但是,在某些应用中,比如把一个UID作为键,USER对象作为值存进去,USER对象内有大量属性(比如name,age等等),这时候如果要取其中的某条属性,就需要把整个USER对象取出来,看上去是十分浪费I/O的。

    redis的散列类型(HASH)可以解决这个问题,只取出你想要的属性值,好处非常明显。坏处是,除了基本的键值对结构,其他结构(比如这个hash结构),都要redis多耗费一些CPU资源(凡事都有代价,时间换空间),虽然这种开销并不大。



■ Python操作redis的hash结构方法定义:

常用的操作方法:

1,hset(name, key, value)     ---- 更新一条数据的属性,没有则新建

2,hget(name, key)     ---- 读取这条数据的指定属性, 返回字符串类型

3,hmset(name, mapping)      ---- 批量更新数据(没有则新建)属性

4,hmget(name, keys, *args)      ---- 批量读取数据(没有则新建)属性

5,hgetall(name)    ---- 获取这条数据的所有属性和对应的值,返回字典类型

6,hkeys(name)     ---- 获取这条数据的所有属性名,返回列表类型

6,hdel(name, *keys)     ---- 删除这条数据的指定属性


简单来说,hash操作,对比基本的键值对操作,只是多了一个必传的键名name而已。


■ 例子:

我们假设一个键名为 "123456" 的用户对象,具体结构为:

hash操作代码:

#! /usr/bin/env python
#coding=utf-8

import redis

r = redis.Redis(host="127.0.0.1", port=6379, db=0)
# 新建一条键名为"123456"的数据, 包含属性attr_1
r.hset("123456", "attr_1", 100)
# 更改键名为"123456"的数据, 更改属性attr_1的值
r.hset("123456", "attr_1", 200)

# 取出属性attr_1的值
attr_1 = r.hget("123456", "attr_1")

# 输出看一下(发现属性值已经为str)
print "-- get attr_1:", attr_1

# 属性集合
attr_dict = {
    "name": "常成功",
    "alias": "常城",
    "sex": "male",
    "height": 175,
    "postal code": 100086,
    "Tel": None,
}
# 批量添加属性
r.hmset("123456", attr_dict)

# 取出所有数据(返回值为字典)
h_data = r.hgetall("123456")

# 输出看一下(取出来的时候都变成了str)
print "-- get all attr:", h_data

# 删除属性(可以批量删除)
r.hdel("123456", "Tel")

# 取出所有属性名
h_keys = r.hkeys("123456")

print "-- get attr name:", h_keys



输出结果:

-- get attr_1: 200
-- get all attr: {'attr_1': '200', 'Tel': 'None', 'name': '\xe5\xb8\xb8\xe6\x88\x90\xe5\x8a\x9f', 'age': '1111111', 'height': '175', 'alias': '\xe5\xb8\xb8\xe5\x9f\x8e', 'postal code': '100086', 'sex': 'male'}
-- get attr name: ['name', 'postal code', 'alias', 'height', 'sex', 'age', 'attr_1']








  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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数据类型(字符串、列表、集合、有序集合和哈希)。如果你使用了其他数据类型,你需要相应地进行修改。 希望对你有所帮助!如有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值