NoSQL之Redis中的hash 操作

前端之家收集整理的这篇文章主要介绍了NoSQL之Redis中的hash 操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Redishash是一个string类型的field和value的映射表.它的添加删除操作都是O(1)(平均)。hash特别适合用于存储对象。
相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,
并且可以更方便的存取整个对象。省内存的
原因是新建一个hash对象时开始是用zipmap(又称为smallhash)来存储的。这个zipmap其实并不是hash
table,但是zipmap相比正常的hash实现可以节省不少hash本身需要的一些元数据存储开销。
尽管zipmap的添加删除,查找都是
O(n),但是由于一般对象的field数量都不太多。所以使用zipmap也是很快的,也就是说添加删除平均还是O(1)。如果field或者
value的大小超出一定限制后,Redis会在内部自动将zipmap替换成正常的hash实现.这个限制可以在配置文件中指定
hash-max-zipmap-entries64#配置字段最多64个。
hash-max-zipmap-value512#配置value最大为512字节。

说了这么多的理论,上点操作怎么样

1、hset

  设置hashfield为指定值,如果key不存在,则先创建。
  127.0.0.1:6379>hsetusername
  127.0.0.1:6379>hsetusernameheinrich
(integer)0
127.0.0.1:6379>hsetuserage14
(integer)1
127.0.0.1:6379>
如果存在返回0

2,hsetnx

设置hashfield为指定值,如果key不存在,则先创建。如果field已经存在,返回0,nx是notexist的意思。
127.0.0.1:6379>hsetuserage14
(integer)1
127.0.0.1:6379>hsetnxusernameheinrich
(integer)0
127.0.0.1:6379>hsetnxusernamebob
(integer)0
127.0.0.1:6379>hsetnxuserweigth20kg
(integer)1
127.0.0.1:6379>
所有的redis操作都只需要关注key和value无关,看上面就知道了

3,hmset
  
同时设置hash的多个field。
127.0.0.1:6379>hmsetusernamegeeage12
OK

4,hget

获取指定的value值
 
127.0.0.1:6379>hsetusernamegas
(integer)0
127.0.0.1:6379>hgetusername
"gas"
127.0.0.1:6379>hgetuserage
"12"
127.0.0.1:6379>

5,hmget
  
获取全部指定的hashfiled。
 127.0.0.1:6379>hmgetusernameagepassword
1)"gas"
2)"12"
3)(nil)
127.0.0.1:6379>
由于数据库没有field3,所以取到的是一个空值nil。

6,hincrby  

指定的hashfiled加上给定值。也可以说是做加减法操作
127.0.0.1:6379>hincrbyuserage12
(integer)123456
127.0.0.1:6379>hmgetusernameage
1)"gas"
2)"12"
127.0.0.1:6379>

7,hexists  

测试指定field是否存在。
127.0.0.1:6379>hexistsusername
(integer)1
127.0.0.1:6379>hexistsusername1
(integer)0
127.0.0.1:6379>
如果存在返回1不存在返回0

8,hlen
  返回指定hash的field数量。
  127.0.0.1:6379>hlenuser
(integer)5

9,hdel  
删除指定的对象中的元素并返回删除的hash的field数量。
127.0.0.1:6379>hlenuser
(integer)5
127.0.0.1:6379>hdeluserpwd
(integer)1
127.0.0.1:6379>hmgetusernameage
1)"gas"
2)"12"
127.0.0.1:6379>
当然我们的del可是万能的可以直接删除hashmap中的对象

127.0.0.1:6379>hmsetusernameheinrichage21
OK
127.0.0.1:6379>hmgetusernameage
1)"heinrich"
2)"21"
127.0.0.1:6379>deluser
(integer)1
127.0.0.1:6379>hmgetusernameage
1)(nil)
2)(nil)
127.0.0.1:6379>
这就叫牛掰,完胜其他的del操作

11,hvals
  
返回hash的所有value。
127.0.0.1:6379>hmsetusernameheinrichage21pwdroot
OK
127.0.0.1:6379>hvalsuser
1)"heinrich"
2)"21"
3)"root"
127.0.0.1:6379>
主管再也不用担心我的学习了
但是看不到key,就像是找不到老婆,多难受

12,hgetall

获取某个hash中全部的filed及value。看到没就是这么牛掰,请记住不是hmgetall是hgetall

127.0.0.1:6379>hgetalluser
1)"name"
2)"heinrich"
3)"age"
4)"21"
5)"pwd"
6)"root"
127.0.0.1:6379>







 

猜你在找的NoSQL相关文章