redis(三)-----redis基本数据类型

Redis的全称是REmote Dictionary Server,它主要提供了5种数据结构:字符串、哈希、列表、集合、有序集合,同时在字符串的基础之上演变 出了位图(Bitmaps)和HyperLogLog两种神奇的“数据结构”,并且随着 LBS(Location Based Service,基于位置服务)的不断发展,Redis3.2版本中 加入有关GEO(地理信息定位)的功能

哈希

几乎所有的编程语言都提供了哈希(hash)类型,它们的叫法可能是哈 希、字典、关联数组。在Redis中,哈希类型是指键值本身又是一个键值对 结构,形如value={{field1,value1},...{fieldN,valueN}}

redis-hash

注意
哈希类型中的映射关系叫作field-value,注意这里的value是指field对应 的值,不是键对应的值

命令

设置值,获取值
设置值
hset key field value
获取值
hget key field
实例
127.0.0.1:6379> hset user1 name nerrys
(integer) 1
127.0.0.1:6379> hget user1 name
"nerrys"
键或field不存在
如果键或field不存在,会返回nil:
127.0.0.1:6379> hget user2 name
(nil)

删除field
hdel key field [field ...]
实例
127.0.0.1:6379> hdel user1 name
(integer) 1
127.0.0.1:6379> hget user1 name
(nil)

计算field个数
hlen key
实例
127.0.0.1:6379> hget user1 name
"nerrys"
127.0.0.1:6379> hget user1 age
"22"
127.0.0.1:6379> hget user1 sex
"man"
127.0.0.1:6379> hget user1 city
"beijing"
127.0.0.1:6379> hlen user1
(integer) 4

批量设置或获取field-value
hmget key field [field ...]
hmset key field value [field value ...]

hmset和hmget分别是批量设置和获取field-value,
hmset需要的参数是key 和多对field-value,hmget需要的参数是key和多个field。
实例
127.0.0.1:6379> hmget user name user2 22 sex

"nerrys"

"age"

"user3"

"man"
127.0.0.1:6379> hmset user1 name nerrys age 22 sex man city beijing
OK
127.0.0.1:6379> hmget user1 name age sex city

"nerrys"

"22"

"man"

"beijing"

判断field是否存在
hexists key field
实例
127.0.0.1:6379> hexists user1 name
(integer) 1

获取所有field
hkeys key
实例
127.0.0.1:6379> hkeys user1

"name"

"age"

"sex"

"city"

获取所有value
hvals key
实例
127.0.0.1:6379> hvals user1

"nerrys"

"22"

"man"

"beijing"

获取所有的field-value
hgetall key

实例
127.0.0.1:6379> hgetall user1

"name"

"nerrys"

"age"

"22"

"sex"

"man"

"city"

"beijing"
注意:
在使用hgetall时,如果哈希元素个数比较多,会存在阻塞Redis的可能

hincrby hincrbyfloat
hincrby key field
hincrbyfloat key field
hincrby和hincrbyfloat,就像incrby和incrbyfloat命令一样,但是它们的作用域是filed。
实例
127.0.0.1:6379> hincrby user1 age 1
(integer) 23
127.0.0.1:6379> hget user1 age
"23"

计算value的字符串长度
hstrlen key field
实例
127.0.0.1:6379> hstrlen user1 name
(integer) 6
127.0.0.1:6379> hget user1 name
"nerrys"

内部编码

哈希类型的内部编码有两种:
·ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries 配置(默认512个)、同时所有值都小于hash-max-ziplist-value配置(默认64 字节)时,Redis会使用ziplist作为哈希的内部实现,ziplist使用更加紧凑的 结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀。

·hashtable(哈希表):当哈希类型无法满足ziplist的条件时,Redis会使 用hashtable作为哈希的内部实现,因为此时ziplist的读写效率会下降,而 hashtable的读写时间复杂度为O(1)。

测试
127.0.0.1:6379> object encoding user1
"ziplist"

当有value大于64字节,内部编码会由ziplist变为hashtable:

127.0.0.1:6379> hset hashkey f1 thishashkeyisbetterthan64byteisisisisisiisisisisisiisisisisisisisiisisisisiisisisisiisisisisisisisiisisisisisiisis
(integer) 1
127.0.0.1:6379> object encoding hashkey
"hashtable"

当field个数超过512,内部编码也会由ziplist变为hashtable:

127.0.0.1:6379> hmset hashkey f1 v1 f2 v2 f3 v3 ...忽略... f513 v513(太长了)

使用场景

1.对关系型数据库的数据存储

关系型数据库

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfszg.html