Redis系列(二):Redis的数据类型及命令操作 (2)

图示

相关操作命令 127.0.0.1:6379> hset user name zhangsan # 使用 hset 为 user 添加一个键值对 name = zhangsan (integer) 1 127.0.0.1:6379> hset user age 18 # 使用 hset 为 user 添加一个键值对 age = 18 (integer) 1 127.0.0.1:6379> hget user name # 使用 hget 获取 user 中键为 name 的值 "zhangsan" 127.0.0.1:6379> hget user age # 使用 hget 获取 user 中键为 age 的值 "18" 127.0.0.1:6379> hgetall user # 使用 hgetall 获取 user 中所有的键值对 1) "name" 2) "zhangsan" 3) "age" 4) "18" 127.0.0.1:6379> hmset user name lisi age 20 # 使用 hmset 为 user 批量添加键值对 OK 127.0.0.1:6379> hmget user name age # 使用 hmget 批量获取 user 中键的值 1) "lisi" 2) "20" 127.0.0.1:6379> hdel user name# 使用 hdel 删除 user 一个(或多个)键值对 (integer) 1 127.0.0.1:6379> hexists user name # 使用 hexists 判断 user 中 name 元素是否存在 (integer) 0 127.0.0.1:6379> hexists user age # 使用 hexists user 中 age 元素是否存在 (integer) 1 127.0.0.1:6379> hkeys user # 使用 hkeys 只获得 user 中的字段名 1) "age" 127.0.0.1:6379> hvals user # 使用 hvals 只获得 user 中的字段值 1) "20" 127.0.0.1:6379> hlen user # 使用 hlen 获得 user 中字段(键值对)数量 (integer) 1 其他特性

Redis 中的 Hash 结构有扩容和缩容特性,扩容主要应用在当 hash 内部比较拥挤的时候,容易产生 hash 碰撞,这时需要扩容 hash 。申请新的两倍大小的数组;而缩容与扩容恰恰相反,虽然原理一样,但是申请的新数组要比旧的小一倍。

应用场景

保存大量的对象数据

列表类型(List) redis list介绍

在 java 中,列表类型有两种,一种是 ArrayList,实现方式是数组,所以根据索引查询数据速度快,而插入或者删除某个元素涉及到位移操作,会比较慢;另一种是 LinkedList,实现方式是双向链表(double linked list),每个元素都记录着前后元素的指针。所以在插入或删除某个元素时只需要更改该元素的前后指针指向就行,非常快,但是在查询上需要从头索引,特别是当数据量大的时候,索引起来还是比较慢的。

在 Redis 中的 List 类型,其内部使用的是双向链表实现的,所以它具有双向链表具有的相关特性。其常用操作就是向列表两端添加或删除元素。这使得 List 既可以当做栈(先进后出)来使用,也可以当做队列(先进先出)来使用。

相关操作命令 127.0.0.1:6379> lpush list 1 2 3 4 # 使用 lpush 将 1 2 3 4 依次插入到 list 的左端 (integer) 4 127.0.0.1:6379> rpush list 5 6 7 8 # 使用 rpush 将 5 6 7 8 依次插入到 list 的右端 (integer) 8 127.0.0.1:6379> lrange list 0 -1 # 使用 lrange 获取 指定区间上所有值(0 -1 表示获取全部) 1) "4" 2) "3" 3) "2" 4) "1" 5) "5" 6) "6" 7) "7" 8) "8" 127.0.0.1:6379> lpop list # 使用 lpop 弹出 list 左端的一个值,并返回弹出的值 "4" 127.0.0.1:6379> lpop list "3" 127.0.0.1:6379> rpop list # 使用 rpop 弹出 list 右端的一个值,并返回弹出的值 "8" 127.0.0.1:6379> rpop list "7" 127.0.0.1:6379> lrange list 0 -1 1) "2" 2) "1" 3) "5" 4) "6" 127.0.0.1:6379> llen list # 使用 llen 获取 list 中元素个数 (integer) 4 应用场景

商品,博客,文章下面的评论列表。

集合类型(Set) redis set 介绍

redis 中的 set 类型和 java 中的 HashSet 类似,其底层都是用HashMap 实现的,只不过所有的 value 都指向同一个对象。在 set 中,没有重复的元素。并且没有顺序。其常用的操作就是向集合中加入或删除一个元素、判断某个元素是否在集合中。另外 redis 还提供了多个集合之间的 交集、并集、差集的运算。

相关操作命令 127.0.0.1:6379> sadd set a b c 1 2 3 # 使用 sadd 将 a b c 1 2 3 添加到 set 集合中 (integer) 6 127.0.0.1:6379> sadd set a b 2 # 添加重复元素,返回成功添加 0 个,说明 set 中元素不重复 (integer) 0 127.0.0.1:6379> srem set a b 1 # 使用 srem 删除 set 集合中的 a b 1 三个元素 (integer) 3 127.0.0.1:6379> smembers set # 使用 smembers 获取 set 集合中所以元素 1) "2" 2) "c" 3) "3" 127.0.0.1:6379> sismember set a # 使用 sismember 判断 a 是否在 set 集合中 (integer) 0 127.0.0.1:6379> sismember set c # 使用 sismember 判断 c 是否在 set 集合中 (integer) 1 集合间的相关运算 集合的并集运算 A ∪ B

并集

127.0.0.1:6379> sadd seta 1 2 3 (integer) 3 127.0.0.1:6379> sadd setb 3 4 5 (integer) 3 127.0.0.1:6379> sunion seta setb # 使用 sunion 计算 seta 和 setb 的并集 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 集合的交集运算 A ∩ B

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

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