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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 所谓工欲善其事,必先利其器。前面我们介绍了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。

相关文章
|
存储 缓存 NoSQL
Redis 服务器全方位介绍:从入门到核心原理
Redis是一款高性能内存键值数据库,支持字符串、哈希、列表等多种数据结构,广泛用于缓存、会话存储、排行榜及消息队列。其单线程事件循环架构保障高并发与低延迟,结合RDB和AOF持久化机制兼顾性能与数据安全。通过主从复制、哨兵及集群模式实现高可用与横向扩展,适用于现代应用的多样化场景。合理配置与优化可显著提升系统性能与稳定性。
267 0
|
2月前
|
存储 NoSQL 前端开发
Redis专题-实战篇一-基于Session和Redis实现登录业务
本项目基于SpringBoot实现黑马点评系统,涵盖Session与Redis两种登录方案。通过验证码登录、用户信息存储、拦截器校验等流程,解决集群环境下Session不共享问题,采用Redis替代Session实现数据共享与自动续期,提升系统可扩展性与安全性。
232 3
Redis专题-实战篇一-基于Session和Redis实现登录业务
|
2月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
189 1
Redis专题-实战篇二-商户查询缓存
|
8月前
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
865 0
分布式爬虫框架Scrapy-Redis实战指南
|
5月前
|
缓存 监控 NoSQL
Redis 实操要点:Java 最新技术栈的实战解析
本文介绍了基于Spring Boot 3、Redis 7和Lettuce客户端的Redis高级应用实践。内容包括:1)现代Java项目集成Redis的配置方法;2)使用Redisson实现分布式可重入锁与公平锁;3)缓存模式解决方案,包括布隆过滤器防穿透和随机过期时间防雪崩;4)Redis数据结构的高级应用,如HyperLogLog统计UV和GeoHash处理地理位置。文章提供了详细的代码示例,涵盖Redis在分布式系统中的核心应用场景,特别适合需要处理高并发、分布式锁等问题的开发场景。
390 41
|
4月前
|
存储 NoSQL 定位技术
Redis数据类型面试给分情况
Redis常见数据类型包括:string、hash、list、set、zset(有序集合)。此外还包含高级结构如bitmap、hyperloglog、geo。不同场景可选用合适类型,如库存用string,对象存hash,列表用list,去重场景用set,排行用zset,签到用bitmap,统计访问量用hyperloglog,地理位置用geo。
126 5
|
4月前
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
558 2
|
5月前
|
缓存 NoSQL 算法
高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
秒杀系统面临瞬时高并发、资源竞争和数据一致性挑战。传统方案如数据库锁或应用层锁存在性能瓶颈或分布式问题,而基于Redis的分布式锁与Lua脚本原子操作成为高效解决方案。通过Redis的`SETNX`实现分布式锁,结合Lua脚本完成库存扣减,确保操作原子性并大幅提升性能(QPS从120提升至8,200)。此外,分段库存策略、多级限流及服务降级机制进一步优化系统稳定性。最佳实践包括分层防控、黄金扣减法则与容灾设计,强调根据业务特性灵活组合技术手段以应对高并发场景。
1562 7
|
5月前
|
机器学习/深度学习 存储 NoSQL
基于 Flink + Redis 的实时特征工程实战:电商场景动态分桶计数实现
本文介绍了基于 Flink 与 Redis 构建的电商场景下实时特征工程解决方案,重点实现动态分桶计数等复杂特征计算。通过流处理引擎 Flink 实时加工用户行为数据,结合 Redis 高性能存储,满足推荐系统毫秒级特征更新需求。技术架构涵盖状态管理、窗口计算、Redis 数据模型设计及特征服务集成,有效提升模型预测效果与系统吞吐能力。
560 2
|
8月前
|
缓存 NoSQL Java
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
754 79
下一篇
oss云网关配置