redis操作数据-hashes

本文介绍了Redis中Hash数据结构的内部实现原理,特别是在节省内存方面的优势。通过使用zipmap存储少量字段,有效减少了元数据开销。此外,还列举了各种Hash数据操作命令及其示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么存储成hash会省内存?

之所以存成hash省内存,原因是新建一个hash对象开始是用zipmap(small hash)来存储的.这个zipmap其实并不是hash table,但是zipmap相比正常的hash实现可以节省不少hash本身需要的一些元数据存储开销.尽管zipmap的添加,删除,查找都是o(n),但是由于一般对象field数量都不太多.所以使用zipmap也是很快的,也就是说添加删除平均还是o(1).如果field活着value的大小超出一定限制后,redis会在内部自动将zipmap替换成正常的hash实现.这个限制可以在配置文件中指定

hash-max-zipmap-entries 64 #配置字段最多64个

hash-max-zipmap-value 512 #配置value最大为512字节

数据操作命令

1.hset设置key和value值,如果不存在key则先创建

127.0.0.1:6379> hset myhash name tonva
(integer) 1

myhash表示的是设置hash的名字

2.hsetnx设置key和value,如果field已经存在返回0,如果不存在返回1

127.0.0.1:6379> hsetnx myhash name "tonva"
(integer) 0

3.hmset,同时设置hash的多个key

127.0.0.1:6379> hmset myhash name tonva password 451989
OK

4.hget获取指定的hash key值

127.0.0.1:6379> hget myhash password
"451989"

5.hmget获取多个hash key的值

127.0.0.1:6379> hmget myhash name password
1) "tonva"
2) "451989"

6.hincrby给指定的hash key加上定值

127.0.0.1:6379> hincrby myhash count 10
(integer) 10
127.0.0.1:6379> hget myhash count
"10"
127.0.0.1:6379> hincrby myhash count -5
(integer) 5

7.hexists测试指定key是否存在

127.0.0.1:6379> hexists myhash count
(integer)  1
127.0.0.1:6379> hexists myhash count2
(integer) 0

8.hlen返回指定hash的field数量

127.0.0.1:6379> hlen myhash
(integer) 3

9.hdel删除指定hash key的值

127.0.0.1:6379> hdel myhash count
(integer) 1
127.0.0.1:6379> hget myhash count
(nil)

10.hkeys,返回hash的所有key

127.0.0.1:6379> hkeys myhash
1) "name"
2) "password"

11.hvals,返回hash的所有value

127.0.0.1:6379> hvals myhash
1) "tonva"
2) "451989"

12.hgetall,获取指定hash中所有key和value

127.0.0.1:6379> hgetall myhash
1) "name"
2) "tonva"
3) "password"
4) "451989"


转载于:https://my.oschina.net/kittyMan/blog/340037

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值