Redis基本类型第二天

Redis基本类型第二天,第1张

Redis第二天 Redis集合(Set)

​ Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set可以自动去重(相当于数学中的集合),当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

​ Redis的 set 是string类型的无序集合。底层是一个value位null的hash表,所以添加、删除、查找复杂度都是O(1)。

常用命令

sadd 将一个或多个member元素加入到集合key中,已经存在的member元素将被忽略

smember 取出该集合的所有值

sismember 判断集合是否含有该值,有1,没有0

scard 返回该集合的元素个数

srem 删除集合中的某个元素

spop 随机从该集合中d出一个值

srandmember 随机从该集合中取出n个值。不会从集合中删除。

smove value 把集合中一个值从一个集合移动到另一个集合

sinter 返回两个集合的交集元素

sunion 返回两个集合的并集元素

sdiff返回两个集合的差集元素(key1中的,不包含key2中的)

数据结构

​ Set数据结构底层是dict字典,字典使用哈希表实现的。

​ Java中的HashSet的内部实现使用的是HashMap,只不过所有的value都指向一个对象。Redis的set结构也是一样,他的内部也使用hash结构,所有的value都指向同一个内部值。

Redis 哈希(Hash)
  • Redis hash 是一个键值对集合
  • Redis hash 是一个string类型的fidle 和value 的映射边表,hash特别适合用于存储对象。
  • 类似Java中的Map
存储{id=1,name=zhangsan,age=20}对象
第一种: user : {id=1,name=zhangsan,age=20}
第二种:分开存储
	user:id 1
	user:name zhangsan
	user:age 20
第三种:hash
		id  1
user	name zhangsan
		age 20
通过key + field就可以 *** 作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题
常用命令

hset 给key 集合中的 field键赋值为value

hget 从集合取出 value

hmset 批量设置hash的值

hexists查看哈希表key中,给定field是否存在

hkeys 列出该hash集合的所有field

hvals 列出hash集合所有的value

hincrby 为哈希表key中的域field的值加上增量1 -1

hsetnx 将哈希表key中的域field的值设置为value,当且仅当域field不存在。

数据结构

​ Hash类型对应的数据结构是两种:ziplist , hashtable 。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable.

Redis有序集合Zset(Sorted set)

​ Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score),这个评分被用来按照最低分到最高分的方式排序集合中的成员。集合的成员是唯一的额,但是评分可以是重复的。

​ 因为元素是有序的,所以可以很快的根据评分或者次序来获取一个范围的元素,访问有序集合的中间元素也是非常快的,因此能够使用有序集合作为一个没有重复成员的智能列表。

常用命令

zadd 将一个或多个member元素及其score值加入到有序集合key当中。

zrange [WITHSOCRES] 返回有序集key中,下标在之间的元素。WITHSCORES:分数一起显示出来

zrangebyscore key min max [withscores]返回有序集key中,所有scre值介于min和max之间的成员按递增顺序排列。

zrevrangebyscore key max min [withscores] 同上,中不过是按递减顺序

zincrby 为元素的score加上增量

zrem 删除该集合下指定值的元素

zcount 统计该集合,分数区间内的元素个数

zrank 返回该值在集合中的排名,从0开始

数据结构

​ SortedSet(Set)是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map,可以给每一个元素value赋予一个权重score,另一方面又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。

​ zset底层使用了两个数据结构

  1. hash,hash作用就是关联元素value和权score,保障元素value的唯一性,可以通过元素value找到相应的score值。
  2. 跳跃表,跳跃表的目的在于给元素value排序,根据socre的范围获取元素列表。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/905242.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-15
下一篇 2022-05-15

发表评论

登录后才能评论

评论列表(0条)

保存