Redis入门实战(三)Redis 五个基本数据类型

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 所谓工欲善其事,必先利其器。前面我们介绍了Redis在windows和在Linux下的安装和配置。Redis处理性能强大之外,还有一个优势就是提供了多种数据结构,应对不同的业务场景。接下来我们介绍Redis的常用数据类型。

所谓工欲善其事,必先利其器。前面我们介绍了Redis在windows和在Linux下的安装和配置。Redis处理性能强大之外,还有一个优势就是提供了多种数据结构,应对不同的业务场景。接下来我们介绍Redis的常用数据类型。


Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。


一、String(字符串)

string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。string 类型是二进制安全的,它可以包含任何数据类型。比如序列化的对象等。

string 类型是 Redis 最基本最常用的数据类型,string 类型的值最大能存储 512MB。


1.测试

127.0.0.1:6379> SET weiz:string "hello weiz"
OK
127.0.0.1:6379> GET weiz:string
"hello weiz"

在以上实例中我们使用了 Redis 的 SET 和 GET 命令新增和获取缓存数据。键为 "weiz:string",对应的值为"hello weiz"。如下图所示:

image.png


2.常用命令

除了上面的get,set命令外,Redis还提供了很多功能强大的命令,比如递增,递减等,具体如下所示:

  1. mset用于同时设置一个或多个键值对
  2. mget用于同时获取一个或多个 value
  3. expire用于给已经存在的键设置过期时间,单位为秒
  4. setnx用于如果键不存在,则会添加成功,否则将添加失败
  5. setex用于在添加键值对的时候就为其设置过期时间(set 方式添加是永不过期)
  6. msetnx用于批量添加,如果有一个键已经存在,则所有都将添加失败
  7. incr如果值是integer ,则会将其进行加一的操作,如果不是则会报错
  8. decr如果值是integer ,则会将其进行减一的操作,如果不是则会报错
  9. incrby用于自定义需要加多少
  10. decrby用于自定义需要减多少



二、Hash(哈希)

Redis hash 是一个键值(key=>value)对集合。它是一个 string 类型的 field 和 value 的映射表,hash 适合用于存储对象或map等集合数据。

1.测试示例

127.0.0.1:6379> HMSET weiz:hash field1 "Hello" field2 "World"
"OK"
127.0.0.1:6379> HGET weiz:hash field1
"Hello"
127.0.0.1:6379> HGET weiz:hash field2
"World"

上面的示例中,我们使用了 Redis的 HMSET, HGET 命令,HMSET 设置了两个 field=>value 的Hash数据集合, 然后通过HGET 获取对应 field 对应的 value。

image.png

每个 hash 可以存储 232 -1 键值对(40多亿)。


2.常用命令

除了上面的HMSET和HGET 外,还有Redis还提供了其他的一些命令来操作Hash数据,常用的命令如下:

  1. hmset用于同时将多个 field-value (字段-值)对设置到哈希表中;
  2. hmget用于返回哈希表中,一个或多个给定字段的值;
  3. hexists用于查看哈希表的指定字段是否存在;
  4. hincrby用于为哈希表中的字段值加上指定增量值;
  5. hlen用于获取哈希表中字段的数量;
  6. hvals返回哈希表所有字段的值,返回一个包含哈希表中所有值的表;
  7. hkeys用于获取哈希表中的所有字段名;
  8. hsetnx用于为哈希表中不存在的的字段赋值;


三、List(列表)

List列表是简单有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。通过List数据类型可以实现队列等功能。

1.测试示例

127.0.0.1:6379> lpush weiz:list redis
(integer) 1
127.0.0.1:6379> lpush weiz:list mongodb
(integer) 2
127.0.0.1:6379> lpush weiz:list rabbitmq
(integer) 3
127.0.0.1:6379> lrange weiz:list 0 10
1) "rabbitmq"
2) "mongodb"
3) "redis"
127.0.0.1:6379>

上面的示例中,我们使用Redis的lpush 命令往键为"weiz:list"的list中加入了3个值。然后通过lrange命令获取list中的数据。

image.png

list列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。


2.常用命令

除了lpush,lpop,lrange命令外,还有rpush,rpop,rrange等命令,具体如下:

  1. LPUSH,用于向列表左边增加元素;
  2. RPUSH,用于向列表右边增加元素;
  3. LPOP,用于从列表左边弹出元素;
  4. RPOP,用于从列表右边弹出元素;
  5. LLEN,用于获取列表中元素的个数;
  6. LRANGE,用于获得列表片段;
  7. LREM,用于删除列表中指定值;
  8. LINDEX,用于获得指定索引的元素值;  
  9. LSET,用于设置指定索引的元素值;
  10. LTRIM,用于只保留列表指定片段;
  11. LINSERT,用于向列表中插入元素;



四、Set(集合)

Redis 的 Set 是 string 类型的无序集合。用于保存多个字符串元素,集合中的元素不能重复,并且集合中的元素也是无序的,无法通过下标来获取集合中的元素,这些特性与java的set非常类似。Redis的 Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

1.sadd命令

Redis提供了sadd命令添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。命令格式如下:sadd key member


2.测试示例

127.0.0.1:6379> sadd weiz:set redis
(integer) 1
127.0.0.1:6379> sadd weiz:set mongodb
(integer) 1
127.0.0.1:6379> sadd weiz:set rabbitmq
(integer) 1
127.0.0.1:6379> sadd weiz:set rabbitmq
(integer) 0
127.0.0.1:6379> smembers weiz:set

上面的示例中,我们通过sadd命令添加数据到set中,然后通过smembers命令获取set中的数据,如下图所示:

image.png

集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。


3.常用命令

除了sadd,smembers命令外,Redis还提供了交集,并集等功能强大的命令,具体如下:

  1. scard 获取集合的成员数
  2. sdiff 获取集合与集合的差集
  3. sinter 获取集合与集合的交集
  4. sismember 判断member元素是否是集合key的成员
  5. smembers 获取集合中的所有成员
  6. sunion 获取所有给定集合的并集
  7. srem 移除一个或多个元素
  8. sscan 迭代集合中元素



五、zset(sorted set:有序集合)

zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是zset为每个元素都关联了一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

1.zadd 命令

Redis提供了zadd命令添加元素到集合,如果元素在集合中存在则更新对应score,命令格式如下:zadd key score member

2.测试示例

127.0.0.1:6379> zadd weiz:zset 0 redis
(integer) 1
127.0.0.1:6379> zadd weiz:zset 1 mongodb
(integer) 1
127.0.0.1:6379> zadd weiz:zset 2 rabbitmq
(integer) 1
127.0.0.1:6379> zadd weiz:zset 3 rabbitmq
(integer) 0
127.0.0.1:6379> ZRANGEBYSCORE weiz:zset 0 1000
1) "mongodb"
2) "rabbitmq"
3) "redis"

上面的示例中,我们使用zadd添加了3个数据,然后通过 ZRANGEBYSCORE命令获取对应的数据,如下图所示:

image.png


3.常用命令

除了sadd,smembers命令外,Redis还提供了交集,并集等功能强大的命令,具体如下:

  1. zadd 用于在集合中增加序号为n的value;
  2. zrange 用于排序指定的rank(排名)范围内的元素并输出;
  3. zrevrange 用于反向排序;
  4. zrangebyscore 用于获取指定的score范围内的元素;
  5. zrangebylex 用于获取某个范围的数据,还可以使用limit分页;
  6. zincrby 用于为元素的score累加,新元素score基数为0
  7. zrem 用于删除集合中指定的元素;
  8. zrank 用于查询指定value的排名,注意不是score;
  9. zcard 用于获取集合的元素个数;
  10. zremrangebyrank 用于删除某个范围内的元素;
  11. zremrangebyscore 用于删除score在某个范围内的元素;


最后

以上,我们就把Redis的数据结构介绍完了,Redis的各种数据结构都有对应的使用场景。作为开发人员必须熟练掌握。磨刀不误砍柴工,只有掌握了这些基础,才能在实际项目中熟练使用Redis。

相关实践学习
基于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
相关文章
|
24天前
|
NoSQL 安全 测试技术
Redis游戏积分排行榜项目中通义灵码的应用实战
Redis游戏积分排行榜项目中通义灵码的应用实战
43 4
|
13天前
|
存储 NoSQL Redis
redis常见数据类型
Redis 是一种基于内存的键值存储数据库,支持字符串、哈希表、列表、集合及有序集合等多种数据类型,每种类型均有特定用途与适用场景,提供丰富的命令操作,适用于高速数据访问与处理。
29 5
|
1月前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
37 1
|
2月前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
79 5
|
2月前
|
缓存 NoSQL Java
springboot的缓存和redis缓存,入门级别教程
本文介绍了Spring Boot中的缓存机制,包括使用默认的JVM缓存和集成Redis缓存,以及如何配置和使用缓存来提高应用程序性能。
124 1
springboot的缓存和redis缓存,入门级别教程
|
2月前
|
缓存 NoSQL Java
Spring Boot与Redis:整合与实战
【10月更文挑战第15天】本文介绍了如何在Spring Boot项目中整合Redis,通过一个电商商品推荐系统的案例,详细展示了从添加依赖、配置连接信息到创建配置类的具体步骤。实战部分演示了如何利用Redis缓存提高系统响应速度,减少数据库访问压力,从而提升用户体验。
117 2
|
2月前
|
存储 消息中间件 NoSQL
Redis 数据类型
10月更文挑战第15天
40 1
|
2月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
69 8
|
3月前
|
缓存 NoSQL 应用服务中间件
Redis实战篇
Redis实战篇
|
3月前
|
存储 消息中间件 缓存
深入探析Redis常见数据类型及应用场景
深入探析Redis常见数据类型及应用场景
62 2