• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Redis数据类型操作二 (Set/Hash/Zset)

武飞扬头像
RiceVan
帮助1

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)

学新通
学新通
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfjeig
系列文章
更多 icon
同类精品
更多 icon
继续加载