HASH哈希
Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象
类似于python dict 常用的json格式数据
python redis提供的方法与命令行基本一致, 具体的函数及含义可以参考给定的命令行来使用, 对应的函数名称与命令名称基本一致
命令
首先了解官方的命令, 具体如下:
1 HDEL key field2 [field2]
删除一个或多个哈希表字段
2 HEXISTS key field
查看哈希表 key 中,指定的字段是否存在。
3 HGET key field
获取存储在哈希表中指定字段的值/td>
4 HGETALL key
获取在哈希表中指定 key 的所有字段和值
5 HINCRBY key field increment
为哈希表 key 中的指定字段的整数值加上增量 increment 。
6 HINCRBYFLOAT key field increment
为哈希表 key 中的指定字段的浮点数值加上增量increment 。
7 HKEYS key
获取所有哈希表中的字段
8 HLEN key
获取哈希表中字段的数量
9 HMGET key field1 [field2]
获取所有给定字段的值
10 HMSET key field1 value1 [field2 value2 ]
同时将多个 field-value (域-值)对设置到哈希表 key 中。
11 HSET key field value
将哈希表 key 中的字段 field 的值设为 value 。
12 HSETNX key field value
只有在字段 field 不存在时,设置哈希表字段的值。
13 HVALS key
获取哈希表中所有值
14 HSCAN key cursor [MATCH pattern] [COUNT count]
迭代哈希表中的键值对。
15 HSTRLEN
长度 返回与field存储在的哈希关联的值的字符串长度key。如果key或field不存在,则返回0
python-redis
python操作redis hash类型提供一些函数, 函数名称与命令基本一致,可以参考命令进行使用
1.def hset(self, name, key, value)
name对应的hash中设置一个键值对(不存在,则创建;否则,修改)
print rediscli.hset('hms1', 'x1', 'tr1')
print rediscli.hget('hms1', 'x1')
输出:
1
tr1
2.def hsetnx(self, name, key, value
key不存在时才进行设置
print rediscli.hsetnx('hms1', 'x1', 'new1')
print rediscli.hget('hms1', 'x1')
输出结果:
0
tr1
3.hmset(name, mapping
)
批量设置键值对
mapping为dict类型,如:{‘x1’: ‘12x’}
print rediscli.hmset("hms2", {'b1': 'x1', 'b2': 'x2'})
print rediscli.hget('hms2', 'b1')
print rediscli.hmget(name='hms2', keys=['b1', 'b2'])
输出:
True
x1
['x1', 'x2']
4.hget(name,key)
在name中获取key的值
5.hmget(name, keys, *args)
在name对应的hash中获取多个key的值
keys,获取的key列表,如:['x1', 'x2']
*args,要获取的key,如:x1, x2, x3
如:
r.mget('xx', ['k1', 'k2'])
或
print r.hmget('xx', 'k1', 'k2')
6.hgetall(name)
获取name对应hash的所有键值
print rediscli.hgetall("hms2")
7.hlen(name)
获取name键的长度
8.hkeys(name)
获取name对应的hash中所有的key的值
9.hvals(name)
获取name所有的value的值
10.hexists(name, key)
检查KEY是否存在
print rediscli.hexists('hms2', 'x1')
11.hdel(name,*keys)
将key删除
print rediscli.hset('hms3', 'km2', 'hgf')
print rediscli.hdel('hms3', 'km2')
print rediscli.hgetall("hms3")
输出:
1
1
{'km1': '5'}
12.hincrby(name, key, amount=1)
将key做加法, 加上amount
amount,自增数(整数)
print rediscli.hset("hms3", 'km1', 3)
print rediscli.hincrby('hms3', 'km1', amount=2)
print rediscli.hget('hms3', 'km1')
输出:
0
5
5
13.hincrbyfloat(name, key, amount=1.0)
将key加上amount
14.hscan(name, cursor=0, match=None, count=None)
增量式迭代获取,
大于大数据量时优化有用,可以实现分片的获取数据,并非一次性将数据全部获取完
cursor,游标(基于游标分批取获取数据)
match,匹配规则,默认None为所有的值
count 获取的数量, 默认None, 则使用redis默认的分页count数目
cursor1, data1 = rediscli.hscan(‘xxx’, cursor=0)
cursor2, data1 = rediscli.hscan(‘xxx’, cursor=cursor1)
返回值cursor的值为0时,表示数据已经通过分片获取完毕
print rediscli.hscan("hms3")
15.hscan_iter(name, match=None, count=None)
利用生成器获取值
match,匹配规则,默认None为所有的值
count 获取的数量, 默认None, 则使用redis默认的分页count数目
如:
for key in rediscli.hscan_iter(‘xx’):
print(key)
示例程序
# coding:utf-8
import redis
rediscli = redis.Redis(host='127.0.0.1', port=6379, db=13)
print rediscli.hset('hms1', 'x1', 'tr1')
print rediscli.hget('hms1', 'x1')
print rediscli.hsetnx('hms1', 'x1', 'new1')
print rediscli.hget('hms1', 'x1')
print rediscli.hmset("hms2", {'b1': 'x1', 'b2': 'x2'})
print rediscli.hget('hms2', 'b1')
print rediscli.hmget(name='hms2', keys=['b1', 'b2'])
print rediscli.hgetall("hms2")
print rediscli.hlen('hms2')
print rediscli.hkeys('hms2')
print rediscli.hvals('hms2')
print rediscli.hexists('hms2', 'x1')
print rediscli.hset("hms3", 'km1', 3)
print rediscli.hincrby('hms3', 'km1', amount=2)
print rediscli.hget('hms3', 'km1')
print rediscli.hset('hms3', 'km2', 'hgf')
print rediscli.hdel('hms3', 'km2')
print rediscli.hgetall("hms3")
print rediscli.hscan("hms3")
输出结果:
0
tr1
0
tr1
True
x1
['x1', 'x2']
{'b1': 'x1', 'b2': 'x2'}
2
['b1', 'b2']
['x1', 'x2']
False
0
5
5
1
1
{'km1': '5'}
(0L, {'km1': '5'})