4.Python操作Redis:哈希(Hash)

6 篇文章 0 订阅
5 篇文章 0 订阅

Redis 数据库hash数据类型是一个string类型的key和value的映射表,适用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
Python的redis模块实现了Redis哈希(Hash)命令行操作的几乎全部命令,包括HDEL、HEXISTS、HGET、HGETALL、HINCRBY、HKEYS、HLEN 、HMGET 、HMSET 、HSET 、HSETNX 、HVALS 。但是无法支持HINCRBYFLOAT 、HSCAN 等命令。

函数说明

  1. HDEL: 删除对应哈希(Hash)表的指定键(key)的字段,hdel(self, name, key)
  2. HEXISTS: 检测哈希(Hash)表对应键(key)字段是否存在,返回布尔逻辑,hexists(self, name, key)
  3. HGET: 获取哈希(Hash)指定键(key)对应的值,hget(self, name, key)
  4. HGETALL: 获取哈希(Hash)表的键-值对(key-value pairs),返回python字典类型数据,hgetall(self, name)
  5. HINCRBY: 为哈希表(Hash)指定键(key)对应的值(key)加上指定的整数数值(int,可为负值),参见 [Python操作Redis:字符串(String)],(http://blog.csdn.net/u012894975/article/details/51285733)hincrby(self, name, key, amount=1),Redis 中本操作的值被限制在 64 位(bit)有符号数字。
  6. HKEYS: 返回哈希表(Hash)对应键(key)的数组(Python称之为列表List),hkeys(self, name)
  7. HLEN: 获取哈希表(Hash)中键-值对(key-value pairs)个数,hlen(self, name)
  8. HMGET: 获取哈希表(Hash)中一个或多个给点字段的值,不存在返回nil(Redis命令行)/None(Python),hmget(self, name, keys),其中keys可以为列表(list)
  9. HMSET: 设置对个键-值对(key-value pairs)到哈希表(Hash)中,python输入值(mapping)为字典(dictionary)类型,hmset(self, name, mapping)
  10. HSET: 为哈希表(Hash)赋值,若键(key)存在值(value)则覆盖,不存在则创建,hset(self, name, key, value)
  11. HSETNX:为哈希表(Hash)不存值(value)的键(key)赋值,存在操作无效,对应值(value)无变化,hsetnx(self, name, key, value)
  12. HVALS:返回哈希表(Hash)对应值(value)的列表,hvals(self, name)

代码示例

#!/usr/bin/python
import redis
import time
## Connect local redis service
client =redis.Redis(host='127.0.0.1',port=6379,db=0)
print "Connection to server successfully!"
dicKeys = client.keys("*")
print dicKeys

### Redis hash command part Start ###
# hset: Set key to value with hash name,hset(self, name, key, value)
# hget: Return the value of ``key`` within the hash ``name``, hget(self, name, key)
client.hset('myhash','field1',"foo")
hashVal = client.hget('myhash','field1')
print "Get hash value:",hashVal

# Get none-value
hashVal = client.hget('myhash','field2')
print "None hash value:",hashVal

# hexists: Returns a boolean indicating if ``key`` exists within hash ``name``
keyList= ['field1','field2']
for key in keyList:
    hexists = client.hexists('myhash',key)
    if hexists :
        print "Exist in redis-hash key:",key
    else:
        print "Not exist in redis-hash key:",key

# hgetall: Return a Python dict of the hash's name/value pairs
client.hset('myhash','field2',"bar")
valDict = client.hgetall('myhash')
print "Get python-dict from redis-hash",valDict

# hincrby: Increment the value of ``key`` in hash ``name`` by ``amount``
# default increment is 1,
client.hset('myhash','field',20)
client.hincrby('myhash','field')
print "Get incrby value(Default):",client.hget('myhash','field')
client.hincrby('myhash','field',2)
print "Get incrby value(step: 2):",client.hget('myhash','field')
client.hincrby('myhash','field',-3)
print "Get incrby value(step: -3):",client.hget('myhash','field')

# no method hincrbyfloat

#hkeys: Return the list of keys within hash ``name``
kL = client.hkeys('myhash')
print "Get redis-hash key list",kL

#hlen: Return the number of elements in hash ``name``
lenHash =client.hlen('myhash')
print "All hash length:",lenHash

#hmget: Returns a list of values ordered identically to ``keys``
#hmget(self, name, keys), keys should be python list data structure
val =client.hmget('myhash',['field','field1','field2','field3','fieldx'])
print "Get all redis-hash value list:",val

#hmset:  Sets each key in the ``mapping`` dict to its corresponding value in the hash ``name``
hmDict={'field':'foo','field1':'bar'}
hmKeys=hmDict.keys()
client.hmset('hash',hmDict)
val = client.hmget('hash',hmKeys)
print "Get hmset value:",val

#hdel: Delete ``key`` from hash ``name``
client.hdel('hash','field')
print "Get delete result:",client.hget('hash','field')

#hvals:  Return the list of values within hash ``name``
val = client.hvals('myhash')
print "Get redis-hash values with HVALS",val

#hsetnx: Set ``key`` to ``value`` within hash ``name`` if ``key`` does not exist.
#      Returns 1 if HSETNX created a field, otherwise 0.
r=client.hsetnx('myhash','field',2)
print "Check hsetnx execute result:",r," Value:",client.hget('myhash','field')
r=client.hsetnx('myhash','field10',20)
print "Check hsetnx execute result:",r,"Value",client.hget('myhash','field10')

hashVal = client.hgetall('profile')
print hashVal
#Empty db
client.flushdb()

参考资料:
1、Redis 哈希(Hash)
2、Python redis文档(python交互模式下命令>>>help redis)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 您好,以下是回答: 可以使用Pythonredis模块来实现向Redis中插入哈希表和集合的操作。具体代码如下: ```python import redis # 连接Redis r = redis.Redis(host='localhost', port=6379, db=) # 向Redis中插入哈希表 r.hset('myhash', 'mykey', 'myvalue') # 向Redis中插入集合 r.sadd('myset', 'value1', 'value2', 'value3') ``` 其中,`r.hset()`用于向Redis中插入哈希表,第一个参数为哈希表的名称,第二个参数为哈希表中的键,第三个参数为哈希表中的。`r.sadd()`用于向Redis中插入集合,第一个参数为集合的名称,后面的参数为集合中的元素。 希望能对您有所帮助。 ### 回答2: 在使用Python插入Redis哈希表时,我们可以通过将一个Python集合作为来实现。下面是一个示例程序,演示了如何使用Python插入Redis哈希表,为一个Python的集合: ```python import redis # 连接到Redis服务器 r = redis.Redis(host='localhost', port=6379) # 定义一个Python集合 my_set = set(['apple', 'banana', 'orange']) # 将集合转换为Redis支持的数据类型,例如字符串 set_str = ','.join(list(my_set)) # 将集合作为插入Redis哈希表中 r.hset('my_hash', 'my_set', set_str) # 从Redis中获取哈希表中的 value = r.hget('my_hash', 'my_set') # 将获取到的转换回Python的集合 redis_set = set(value.decode().split(',')) print(redis_set) ``` 在上面的代码中,我们首先连接到Redis服务器。然后,我们定义了一个Python集合`my_set`,其中包含了一些水果的名称。接下来,我们将集合转换为Redis支持的数据类型,这里将集合转换为以逗号分隔的字符串`set_str`。然后,我们使用`hset`命令将集合作为插入到Redis哈希表中,其中`my_hash`是哈希表的名称,`my_set`是键名。 在获取哈希表中的时,我们使用`hget`命令获得原始字符串类型的,然后通过解码和分割字符串,将其转换回Python的集合类型。 最后,我们打印输出转换回来的Python集合`redis_set`,验证插入和获取操作的正确性。 注意:在实际应用中,您可能需要根据具体的需求进行更多的异常处理和数据转换操作。 ### 回答3: 在Python中,可以使用redis-py库来操作Redis数据库。要向Redis哈希表中插入一个Python的集合的数据,可以按照以下步骤进行。 1. 首先,需要导入redis库并连接到Redis数据库: ```python import redis # 连接到Redis数据库 r = redis.Redis(host='localhost', port=6379, db=0) ``` 2. 创建一个包含要插入的集合数据的Python集合对象: ```python my_set = set(['value1', 'value2', 'value3']) ``` 3. 使用Redis的hset函数将该集合作为插入到哈希表中: ```python # 将集合插入到哈希表中 r.hset('my_hash', 'my_key', my_set) ``` 在上述代码中,'my_hash'是要插入的哈希表名称,'my_key'是要插入的键名,my_set是要插入的集合对象。 完成上述步骤后,就成功地将一个Python的集合作为插入到Redis哈希表中了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值