【Redis 系列】redis 学习四,set 集合,hash 哈希,zset 有序集合初步认知

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 【Redis 系列】redis 学习四,set 集合,hash 哈希,zset 有序集合初步认知

set 集合

set 集合里面的数据是不能重读的

  • SADD key member [member …]

向 set 集合中添加元素

  • SMEMBERS key

查看集合中的所有元素

  • SISMEMBER key member

查看某一个数据是否在集合中

  • SCARD key

查看集合数据的个数,也就是集合的长度

  • SREM key member [member …]

移除集合中指定的元素

127.0.0.1:6379> sadd myset "hello"
(integer) 1
127.0.0.1:6379> sadd myset "wolrd" "xiaomotong"
(integer) 2
127.0.0.1:6379> SMEMBERS myset
1) "wolrd"
2) "xiaomotong"
3) "hello"
127.0.0.1:6379> SISMEMBER myset hello
(integer) 1
127.0.0.1:6379> SCARD myset
(integer) 3
127.0.0.1:6379> SREM myset wolrd
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "xiaomotong"
2) "hello"
  • SRANDMEMBER key [count]

随机获取集合里面的数据,可以指定个数

127.0.0.1:6379> sadd myset "v1" "v2" "v3" "v4"
(integer) 4
127.0.0.1:6379> SMEMBERS myset
1) "v4"
2) "xiaomotong"
3) "v1"
4) "v2"
5) "hello"
6) "v3"
127.0.0.1:6379> SRANDMEMBER myset
"v2"
127.0.0.1:6379> SRANDMEMBER myset
"xiaomotong"
127.0.0.1:6379> SRANDMEMBER myset 2
1) "v4"
2) "v1"
127.0.0.1:6379>
127.0.0.1:6379> SRANDMEMBER myset 2
1) "xiaomotong"
2) "v1"
  • SPOP key [count]

随机删除集合中的任意元素

127.0.0.1:6379> SMEMBERS myset
1) "v4"
2) "xiaomotong"
3) "v1"
4) "v2"
5) "hello"
6) "v3"
127.0.0.1:6379> SPOP myset
"v2"
127.0.0.1:6379> SMEMBERS myset
1) "v4"
2) "xiaomotong"
3) "v1"
4) "hello"
5) "v3"
127.0.0.1:6379> SPOP myset
"v4"
127.0.0.1:6379> SMEMBERS myset
1) "xiaomotong"
2) "v1"
3) "hello"
4) "v3"
  • SMOVE source destination member

从指定的集合中取出一个元素,放到另外一个集合中

127.0.0.1:6379> SMEMBERS myset
1) "xiaomotong"
2) "v1"
3) "hello"
4) "v3"
127.0.0.1:6379> SMEMBERS myset
1) "xiaomotong"
2) "v1"
3) "hello"
4) "v3"
127.0.0.1:6379> SMOVE myset newset v1
(integer) 1
127.0.0.1:6379> SMEMBERS newset
1) "v1"
127.0.0.1:6379> SMEMBERS myset
1) "xiaomotong"
2) "hello"
3) "v3"
  • SUNION key [key …]

取并集,对两个集合取并集

  • SINTER key [key …]

取交集,对两个集合取交集

127.0.0.1:6379> SMEMBERS myset
1) "xiaomotong"
2) "hello"
3) "v3"
127.0.0.1:6379> sadd newset v3
(integer) 1
127.0.0.1:6379> sadd newset v6 v9
(integer) 2
127.0.0.1:6379> SUNION myset newset
1) "v3"
2) "hello"
3) "xiaomotong"
4) "v1"
5) "v6"
6) "v9"
127.0.0.1:6379> SINTER myset newset
1) "v3"
127.0.0.1:6379>

set 应用场景可以有,多个用户的共同关注,好友推荐,共同的粉丝,功能的爱好等等

hash 哈希

Map 集合,key-map,此时 key-value 是一个集合,本质上和 string 类型没有啥区别,还是一个简单的 key-value 形式

  • HSET key field value [field value …] / HMSET key field value [field value …]

在 hash key 中添加 1 个或者多个 key-value

  • HGET key field

获取 hash 里面的一个 key 对应的 value

  • HMGET key field [field …]

获取 hash 里面的多个 key 对应的 value

  • HGETALL key

获取 hash 里面所有的 键值对

127.0.0.1:6379> hset myhash name xiaomotong age 12 hobby play
(integer) 3
127.0.0.1:6379> hget myhash name
"xiaomotong"
127.0.0.1:6379> hmget myhash name age
1) "xiaomotong"
2) "12"
127.0.0.1:6379> hgetall myhash
1) "name"
2) "xiaomotong"
3) "age"
4) "12"
5) "hobby"
6) "play"
  • HDEL key field [field …]

删除 hash 里面的 key,一个或者多个

127.0.0.1:6379> HSET myhash k1 v1 k2 v2 k3 v3
(integer) 3
127.0.0.1:6379> hgetall
(error) ERR wrong number of arguments for 'hgetall' command
127.0.0.1:6379> hgetall myhash
 1) "age"
 2) "12"
 3) "hobby"
 4) "play"
 5) "k1"
 6) "v1"
 7) "k2"
 8) "v2"
 9) "k3"
10) "v3"
127.0.0.1:6379> HDEL myhash k1 k2
(integer) 2
127.0.0.1:6379> HDEL myhash name
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "age"
2) "12"
3) "hobby"
4) "play"
5) "k3"
6) "v3"
  • HLEN key

获取 hash 的长度,也就是 key-value 的对数

127.0.0.1:6379> HLEN myhash
(integer) 3
  • HINCRBY key field increment

在集合中的某个 key 上增加值,若值是正数,则是加,若值是负数则是减

  • HSETNX key field value

向 hash 中加入键值对,若不存在则添加,存在则添加失败

127.0.0.1:6379> hset myhash age 12
(integer) 1
127.0.0.1:6379> HINCRBY myhash age 2
(integer) 14
127.0.0.1:6379> HINCRBY myhash age -1
(integer) 13
127.0.0.1:6379> HSETNX myhash name xiaozhu
(integer) 1
127.0.0.1:6379> HSETNX myhash name xiaopangzi
(integer) 0
127.0.0.1:6379> hgetall myhash
1) "age"
2) "13"
3) "name"
4) "xiaopangzi"

hash 的应用场景有,经常变更数据的地方,尤其是一些用户的信息,经常变动的信息

hash 更适合对象的存储,string 更加适合字符串的存储

zset 有序集合

zset 也是集合,只是在 set 的基础上加上了一个值

  • ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member …]

向有序集合中添加 分数 和 值,可以添加多个

  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

按照分数的顺序排序,-inf 为负无穷,+inf 为正无穷

  • ZRANGE key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]

查看有序集合里面的所有的值

127.0.0.1:6379> ZADD myage 10 xiaoming 8 xiaohong 19 xiaozhu
(integer) 3
127.0.0.1:6379> ZRANGEBYSCORE myage 0 -1
(empty array)
127.0.0.1:6379> ZRANGEBYSCORE myage -inf +inf
1) "xiaohong"
2) "xiaoming"
3) "xiaozhu"
127.0.0.1:6379> ZRANGEBYSCORE myage -inf +inf withscores
1) "xiaohong"
2) "8"
3) "xiaoming"
4) "10"
5) "xiaozhu"
6) "19"
127.0.0.1:6379> ZRANGEBYSCORE myage -inf 10
1) "xiaohong"
2) "xiaoming"
127.0.0.1:6379> ZRANGE myage 0 -1
1) "xiaohong"
2) "xiaoming"
3) "xiaozhu"
  • ZREM key member [member …]

删除有序集合里面的数据

127.0.0.1:6379> ZREM myage xiaoming
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE myage -inf +inf withscores
1) "xiaohong"
2) "8"
3) "xiaozhu"
4) "19"
  • ZREVRANGE key start stop [WITHSCORES]

对有序集合从大到小排序

127.0.0.1:6379> ZADD myage 7 xiaohe 17 xiaoliu 14 huhu
(integer) 3
127.0.0.1:6379> ZRANGE myage 0 -1
1) "xiaohe"
2) "xiaohong"
3) "huhu"
4) "xiaoliu"
5) "xiaozhu"
127.0.0.1:6379> ZRANGEBYSCORE myage -1 20
1) "xiaohe"
2) "xiaohong"
3) "huhu"
4) "xiaoliu"
5) "xiaozhu"
127.0.0.1:6379> ZRANGEBYSCORE myage -1 20 withscores
 1) "xiaohe"
 2) "7"
 3) "xiaohong"
 4) "8"
 5) "huhu"
 6) "14"
 7) "xiaoliu"
 8) "17"
 9) "xiaozhu"
10) "19"
127.0.0.1:6379> ZREVRANGE myage 0 -1
1) "xiaozhu"
2) "xiaoliu"
3) "huhu"
4) "xiaohong"
5) "xiaohe"

其余的 api 我们可以到 redis 官网上去进行学习和实践,可以查看 redis 官方的中文文档,http://www.redis.cn/

zset 的应用场景有:

set 排序,存储班级成绩信息,工资信息等等,用于排序和筛选的

带有权重的数据或者消息,排行榜的实现等等

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是小魔童哪吒,欢迎点赞关注收藏,下次见~

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
28天前
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
36 5
|
1月前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
122 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
29天前
|
存储 NoSQL Redis
Redis 哈希(Hash)
10月更文挑战第16天
34 1
|
1月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
237 3
|
1月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
30 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
1月前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
35 1
|
1月前
|
NoSQL Redis
redis学习五、错误总结,redis正常运行时后会出现一些bug 总结。
本文介绍了Redis在正常运行时可能遇到的一个错误,即无法进行磁盘持久化的问题,并提供了通过设置`stop-writes-on-bgsave-error`为`no`来解决这一问题的方案。
94 0
|
1月前
|
存储 JavaScript 前端开发
Set、Map、WeakSet 和 WeakMap 的区别
在 JavaScript 中,Set 和 Map 用于存储唯一值和键值对,支持多种操作方法,如添加、删除和检查元素。WeakSet 和 WeakMap 则存储弱引用的对象,有助于防止内存泄漏,适合特定场景使用。
|
2月前
|
存储 Java API
【数据结构】map&set详解
本文详细介绍了Java集合框架中的Set系列和Map系列集合。Set系列包括HashSet(哈希表实现,无序且元素唯一)、LinkedHashSet(保持插入顺序的HashSet)、TreeSet(红黑树实现,自动排序)。Map系列为双列集合,键值一一对应,键不可重复,值可重复。文章还介绍了HashMap、LinkedHashMap、TreeMap的具体实现与应用场景,并提供了面试题示例,如随机链表复制、宝石与石头、前K个高频单词等问题的解决方案。
37 6
【数据结构】map&set详解
|
2月前
|
算法
你对Collection中Set、List、Map理解?
你对Collection中Set、List、Map理解?
36 5