加入收藏 | 设为首页 | 会员中心 | 我要投稿 通化站长网 (https://www.0435zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

深入解析Java泛型

发布时间:2021-02-07 15:22:51 所属栏目:传媒 来源:互联网
导读:. Hash 其用法就跟Java中的HashMap中一样,都是往map中去丢键值对。 4.1 使用 基础的命令如下: hset 在hash中设置键值对 hget 获hash中的某个key值 hdel 删除hash中某个键 hlen 统计hash中元素的个数 hmget 批量的获取hash中的键的值 hmset 批量的设置hash

. Hash

其用法就跟Java中的HashMap中一样,都是往map中去丢键值对。

4.1 使用

基础的命令如下:

  • hset 在hash中设置键值对
  • hget 获hash中的某个key值
  • hdel 删除hash中某个键
  • hlen 统计hash中元素的个数
  • hmget 批量的获取hash中的键的值
  • hmset 批量的设置hash中的键和值
  • hexists 判断hash中某个key是否存在
  • hkeys 返回hash中的所有键(不包含值)
  • hvals 返回hash中的所有值(不包含键)
  • hgetall 获取所有的键值对,包含了键和值

其实大多数情况下的使用跟HashMap是差不多的,没有什么较为特殊的地方。

4.2 原理

hash的底层实现也是有两种,ZipList和HashTable。但具体采用哪一种与Redis的版本无关,而与当前hash中所存的元素有关。首先当我们创建一个hash的时候,采用的ZipList进行存储。随着hash中的元素增多,达到了Redis设定的阈值,就会转换为HashTable。

其设定的阈值如下:

  • 存储的某个键或者值长度大于默认值(64)
  • ZipList中存储的元素数量大于默认值(512)

ZipList上面我们专门简单分析了一下,理解这个设定应该也比较容易。当ZipList中的元素过多的时候,其查询的效率就会变得低下。而HashTable的底层设计其实和Java中的HashMap差不多,都是通过拉链法解决哈希冲突。具体的可以参考从基础的使用来深挖HashMap这篇文章。

5. Set

Set的概念可以与Java中的Set划等号,用于存储一个不包含重复元素的集合。

5.1 使用

其主要的命令如下,key代表redis中的Set,member代表集合中的元素。

  • sadd sadd key member [...] 将一个或者多个元素加入到集合中,如果有已经存在的元素会忽略掉。
  • srem srem key member [...]将一个或者多个元素从集合中移除,不存在的元素会被忽略掉
  • smembers smembers key返回集合中的所有成员
  • sismember dismember key member判断member在key中是否存在,如果存在则返回1,如果不存在则返回0
  • scard scard key返回集合key中的元素的数量
  • smove move source destination member将元素从source集合移动到destination集合。如果source中不包含member,则不会执行任何操作,当且仅当存在才会从集合中移出。如果destination已经存在元素则不会对destination做任何操作。该命令是原子操作。
  • spop spop key随机删除并返回集合中的一个元素
  • srandmember srandmember key与spop一样,只不过不会将元素删除,可以理解为从集合中随机出一个元素来。
  • sinter 求一个或者多个集合的交集
  • sinterstore sinterstore destination key [...]与sinter类似,但是会将得出的结果存到destination中。
  • sunion 求一个或者多个集合的并集
  • sunionstore sunionstore destination key [...]
  • sdiff 求一个或者多个集合的差集
  • sdiffstore sdiffstore destination key [...]与sdiff类似,但是会将得出的结果存到destination中。

5.2 原理

我们知道Java中的Set有多种实现。在Redis中也是,有IntSet和HashTable两种实现,首先初始化的时候使用的是IntSet,而满足如下的条件时,就会转换成HashTable。

  • 当集合中保存的所有元素都是整数时
  • 集合对象保存的元素数量不超过512

上面已经简单的介绍了HashTable了,所以这里只聊聊IntSet。

5.2.1 IntSet

intset底层是一个数组,既然数据结构是数组,那么存储数据就可以是有序的,这也使得intset的底层查询是通过二分查找来实现。其结构如下。

(编辑:通化站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读