文章目录
- 3、Redis集合(Set)
- 4、 Redis哈希(Hash)
- 5、Redis有序集合Zset(sorted set)
- 实操
- 3、Redis集合(Set)
- 4、 Redis哈希(Hash)
- 5、Redis有序集合Zset(sorted set)
3、Redis集合(Set)
- Redis Set 是String类型的无序集合。一个key集合可以对应多个value元素。
- Redis Set 可以自动排重,并且提供了判断某个value是否在一个key集合内的接口。
- Redis Set 底层其实是一个value为null的Hash表,所以添加,删除,查找的复杂度都是O(1)。
- Redis Set 数据结构是dict字典,字典是用哈希表实现的。
- Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。Redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值。
- 将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
sadd <key> <value1> <value2> <value3> …
sadd k1 v1 v2 v3
- 取出该集合的所有值。
smembers <key>
- 判断集合<key>是否为含有该值,有1,没有0
sismember <key> <value>
- 返回该集合的元素个数。
scard <key>
- 删除集合中的某个元素。
srem <key><value1><value2> …
- 随机从该集合中吐出一个值。
spop <key>
- 随机从该集合中取出n个值。不会从集合中删除 。
srandmember <key> <n>
srandmember k1 4
- 把集合中一个值从一个集合移动到另一个集合
smove <source> <destination> value
smove k1 k2 v11
- 返回两个集合的交集元素。
sinter <key1> <key2>
- 返回两个集合的并集元素。
sunion <key1> <key2>
- 返回两个集合的差集元素(key1中的,不包含key2中的)
sdiff <key1> <key2>
4、 Redis哈希(Hash)
- Redis Hash 是一个String类型的 field 和 value 的映射表,类似Java里面的 Map<String,Object>,适合用于存储对象。
- Redis Hash 的 key 表示一个哈希表,key中以 field-value的形式存储。
- 如:用户ID为key,存储的field-value包含姓名,年龄,生日等信息。
- Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。
- 给<key>集合中的<field>键赋值<value>
hset <key> <field> <value>
hset usr1 name Rice
- 批量设置hash的值
hmset <key1> <field1> <value1> <field2> <value2> …
hset usr1 name Rice age 12 gender M
- 从<key1>集合<field>取出 value
hget <key1> <field>
hget usr1 name
- 查看哈希表 key 中,给定域 field 是否存在。
hexists <key1> <field>
hexists usr1 name
- 列出该hash集合的所有field
hkeys <key>
- 列出该hash集合的所有value
hvals <key>
- 为哈希表 key 中的域 field 的值加上增量 1 -1
hincrby <key> <field> <increment>
- 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 .
hsetnx <key> <field> <value>
5、Redis有序集合Zset(sorted set)
- Redis 有序集合 Zset,value由评分(score)和 元素(member)组成。
- 元素(member)是唯一的,但评分可以重复 。
- 评分(score)用来对元素(member)排序,默认从最低到最高排序。
- 可以根据评分(score)或者次序(position)来获取一个范围的元素。
- SortedSet(zset)是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map<String, Double>,可以给每一个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。
- zset底层使用了两个数据结构
(1)hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。
(2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。
- 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
zadd <key> <score1> <value1> <score2> <value2>…
zadd topn 300 java 200 c++ 500 mysql 100 redis
- 返回有序集 key 中,下标在
之间的元素
zrange <key> <start> <stop> [withscores]
zrange topn 0 -1 withscores
(start 0, stop -1, 会返回元素。withscores 会同时返回score和元素)
- 返回有序集 key 中,所有min <= score <= max 的member,结果默认递增排列
zrangebyscore <key> <min> <max> [withscores] [limit offset count]
zrangebyscore topn 100 500
(有序集成员默认按 score 值递增排列 )
- 返回有序集 key 中,所有min <= score <= max 的member,结果按照递减排列
zrevrangebyscore <key> <max> <min> [withscores] [limit offset count]
- 为元素的score加上增量
zincrby <key> <increment> <value>
- 删除该集合下,指定值的元素
zrem <key> <value>
- 统计该集合,分数区间内的元素个数
zcount <key> <min> <max>
- 返回该值在集合中的排名,从0开始。
zrank <key> <value>
实操
3、Redis集合(Set)
set元素无序
set中value是否存在
删除与随机弹出元素
随机取出两个元素
移动元素
4、 Redis哈希(Hash)
5、Redis有序集合Zset(sorted set)