一、 redis 特点
- 所有数据存储在内存中,高速读写
- 提供丰富多样的数据类型:string、 hash、 set、 sorted set、bitmap、hyperloglog
- 提供了 AOF 和 RDB 两种数据的持久化保存方式,保证了 Redis 重启后数据不丢失
- Redis 的所有操作都是原子性的,还支持对几个操作合并后的原子性操作,支持事务
通常我们都把数据存到关系型数据库中,但为了提升应用的性能,我们应该把访频率高且不会经常变动的数据缓存到内存中。。Redis 没有像 MySQL 这类关系型数据库那样强大的查询功能,需要考虑如何把关系型数据库中的数据,合理的对应到缓存的 key-value 数据结构中。
二、 设计 Redis Key
分段设计法
使用冒号把 key 中要表达的多种含义分开表示,步骤如下:
- 把表名转化为 key 前缀
- 主键名(或其他常用于搜索的字段)
- 主键值
- 要存储的字段。
eg. 用户表(user)
1 | zj | 156577812@qq.com |
2 | ai | 156577813@qq.com |
这个简单的表可能经常会有这个的需求:>根据用户 id 查询用户邮箱地址,可以选择把邮箱地址这个数据存到 redis 中:
set user:id:1:email 156577812@qq.com;
set user:id:2:email 156577812@qq.com;
三、 String数据类型的应用场景
1. 简介
string 类型是 Redis 中最基本的数据类型,最常用的数据类型,甚至被很多玩家当成 redis 唯一的数据类型去使用。string 类型在 redis 中是二进制安全(binary safe)的,这意味着 string 值关心二进制的字符串,不关心具体格式,你可以用它存储 json 格式或 JPEG 图片格式的字符串。
2. 数据模型
string 类型是基本的 Key-Value 结构,Key 是某个数据在 Redis 中的唯一标识,Value 是具体的数据。
‘name’ | ‘redis’ |
‘type’ | ‘string’ |
3. 应用场景
(1) 存储 MySQL 中某个字段的值
把 key 设计为 表名:主键名:主键值:字段名
eg.
set user:id:1:email 156577812@qq.com
(2) 存储对象
string 类型支持任何格式的字符串,应用最多的就是存储 json 或其他对象格式化的字符串。(这种场景下推荐使用 hash 数据类型)
set user:id:1 [{"id":1,"name":"zj","email":"156577812@qq.com"},{"id":1,"name":"zj","email":"156577812@qq.com"}]
(3) 生成自增 id
当 redis 的 string 类型的值为整数形式时,redis 可以把它当做是整数一样进行自增(incr)自减(decr)操作。由于 redis 所有的操作都是原子性的,所以 不必担心多客户端连接时可能出现的事务
问题。
四、hash 数据类型的应用场景
1. 简介
hash 类型很像一个关系型数据库的数据表,hash 的 Key 是一个唯一值,Value 部分是一个 hashmap 的结构。
2. 数据模型
假设有一张数据库表如下:
1 | redis | hash |
如果要用 redis 的 hash 结构存储,数据模型如下:
hash数据类型在存储上述类型的数据时具有比 string 类型更灵活、更快的优势,具体的说,使用 string 类型存储,必然需要转换和解析 json 格式的字符串,即便不需要转换,在内存开销方面,还是 hash 占优势。
3. 应用场景
hash 类型十分适合存储对象类数据,相对于在 string 中介绍的把对象转化为 json 字符串存储,hash 的结构可以任意添加或删除‘字段名’,更加高效灵活。
hset user:1 name zj email 156577812@qq.com
五、list 数据类型的应用场景
1. 简介
list 是按照插入顺序排序的字符串链表,可以在头部和尾部插入新的元素(双向链表实现,两端添加元素的时间复杂度为 O(1))。插入元素时,如果 key 不存在,redis 会为该 key 创建一个新的链表,如果链表中所有的元素都被移除,该 key 也会从 redis 中移除。
2. 数据模型
常见操作时用 lpush 命令在 list 头部插入元素, 用 rpop 命令在 list 尾取出数据。
3. 应用场景
(1) 消息队列
redis 的 list 数据类型对于大部分使用者来说,是实现队列服务的最经济,最简单的方式。
(2) “最新内容”
因为 list 结构的数据查询两端附近的数据性能非常好,所以适合一些需要获取最新数据的场景,比如新闻类应用的 “最近新闻”。
4.优化建议
(1) list 是链表结构,所有如果在头部和尾部插入数据,性能会非常高,不受链表长度的影响;但如果在链表中插入数据,性能就会越来越差。
六、set 数据类型的应用场景
1. 简介
set 数据类型是一个集合(没有排序,不重复),可以对 set 类型的数据进行添加、删除、判断是否存在等操作(时间复杂度是 O(1) )
set 集合不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份。
set 类型提供了多个 set 之间的聚合运算,如求交集、并集、补集,这些操作在 redis 内部完成,效率很高。
2. 数据模型
3. 应用场景
set 类型的特点是——不重复且无序的一组数据,并且具有丰富的计算功能,在一些特定的场景中可以高效的解决一般关系型数据库不方便做的工作。
1. “共同好友列表”
社交类应用中,获取两个人或多个人的共同好友,两个人或多个人共同关注的微博这样类似的功能,用 MySQL 的话操作很复杂,可以把每个人的好友 id 存到集合中,获取共同好友的操作就可以简单到一个取交集的命令就搞定。
// 这里为了方便阅读,把 id 替换成姓名
sadd user:wade james melo paul kobe
sadd user:james wade melo paul kobe
sadd user:paul wade james melo kobe
sadd user:melo wade james paul kobe
// 获取 wade 和 james 的共同好友
sinter user:wade user:james
/* 输出:
* 1) "kobe"
* 2) "paul"
* 3) "melo"
*/
// 获取香蕉四兄弟的共同好友
sinter user:wade user:james user:paul user:melo
/* 输出:
* 1) "kobe"
*/
/*
类似的需求还有很多 , 必须把每个标签下的文章 id 存到集合中,可以很容易的求出几个不同标签下的共同文章;
把每个人的爱好存到集合中,可以很容易的求出几个人的共同爱好。
*/
七、sorted set 数据类型的应用场景
1.简介
在 set 的基础上给集合中每个元素关联了一个分数,往有序集合中插入数据时会自动根据这个分数排序。
2.应用场景
在集合类型的场景上加入排序就是有序集合的应用场景了。比如根据好友的“亲密度”排序显示好友列表。
// 用元素的分数(score)表示与好友的亲密度
zadd user:kobe 80 james 90 wade 85 melo 90 paul
// 根据“亲密度”给好友排序
zrevrange user:kobe 0 -1
/**
* 输出:
* 1) "wade"
* 2) "paul"
* 3) "melo"
* 4) "james"
*/
// 增加好友的亲密度
zincrby user:kobe 15 james
// 再次根据“亲密度”给好友排序
zrevrange user:kobe 0 -1
/**
* 输出:
* 1) "james"
* 2) "wade"
* 3) "paul"
* 2) "melo"
*/
相关推荐
这些数据类型的特性使得Redis适合各种应用场景,例如缓存、计数、发布订阅、会话管理等。 一、字符串(String) 字符串是最基础的数据类型,可以存储任意二进制数据,包括数字和文本。Redis提供了丰富的操作命令,...
2、Redis的每个数据类型是处理不同业务场景而诞生,基本数据类型为5种,从redis5.0版发布后新增了Stream数据类型,如下思路图: 3、其中跳表为插入,删除,查询比较快的动态数据结构,跳表是一个值有序的链表建立...
对于需要按照特定指标(如点赞数、评论数等)进行排名的应用场景,Redis的`Sorted Set`数据结构提供了强大的支持。 - **实现方法**: - 每当用户行为发生改变时(如点赞),使用`ZADD`命令更新该用户的分数。 - ...
String是Redis中最基本的数据类型,可以包含任何数据,比如JPEG图片或者序列化的对象。它非常灵活,因为可以对数据进行增加、删除、计数等操作。String的常用命令包括get、set、incr、decr和mget等。 #### 应用场景...
Redis 基本使用已经应用场景 Redis 作为一种 NoSQL 数据库,广泛应用于大数据时代的各种场景中。了解 Redis 的基本使用和应用场景对于开发者来说至关重要。本文将对 Redis 的基本概念、特点、应用场景进行详细的...
接下来,我们将详细介绍Redis中的主要数据类型及其应用场景。 #### String 字符串 - **简介**:字符串是Redis中最基本的数据类型,它可以存储二进制安全的字符串,最大长度为512MB。 - **应用场景**: - 计数器,...
2. **Redis数据类型及操作**:这是Redis的核心部分,包括五大数据类型: - **字符串(String)**:最基础的数据类型,支持设置、获取、增加、减少等操作。 - **哈希(Hash)**:用于存储键值对集合,适用于存储对象。 ...
Redis数据类型和应用场景总结 Redis 是一个功能强大且广泛使用的Nosql数据库,提供了丰富的数据类型,每种数据类型都有其特点和应用场景。下面我们将详细介绍 Redis 的九种数据类型和各自的应用场景。 一、String...
Redis 是一个高性能的键值数据库,它支持五种主要的数据类型:String、Hash、List、Set 和 Sorted Set,每种类型都有其特定的使用场景。 1. String:这是最基本的键值对数据类型,其中值可以是字符串或数字。String...
本文将深入探讨如何使用Java操作Redis的四种主要数据类型:字符串(String)、列表(List)、哈希(Hash)和集合(Set)。 首先,我们来看**字符串类型**(String)。在Redis中,字符串是最基础的数据类型,可以...
通过以上对Redis数据类型及其相关指令的整理,我们可以了解到Redis提供了非常丰富和灵活的数据操作能力,这使得Redis成为了一个在多种应用场景下都非常实用的工具。无论是在数据存储、缓存加速还是消息队列等场景,...
总的来说,Redis 的各种数据类型为开发人员提供了灵活的选择,可以根据具体应用场景选择合适的数据结构,以实现高效、可靠的数据存储和处理。在使用过程中,需要注意数据量、性能优化以及内存管理,确保系统的稳定性...
#### 一、Redis 数据类型及应用场景 ##### 1. String 类型 - **简单的 KV 存储**:适用于基本的键值存储需求。 - **基于 SETNX 的分布式锁**:SETNX 命令用于实现简单的分布式锁机制,保证在分布式环境下对资源的...
面试中,了解 Redis 的应用场景、数据类型、持久化机制以及集群模型是非常重要的。例如,面试者可能被问及如何设计高并发的用户计数系统、如何利用 Redis 实现消息队列、或者如何处理 Redis 集群中的数据迁移等问题...
2. Redis数据结构及其使用方式: - **Strings**:简单的key-value存储,可存储字符串或数字,支持字符串长度获取、追加、设置特定范围内容等操作。 - **Hashes**:用于存储键值对的集合,适合表示对象或结构化数据...
本文将深入探讨Redis中的五大数据类型及其应用场景。 1. 字符串(String) 字符串是最基本的数据类型,用于存储单个值。它可以是数字、字母或任何Unicode字符。在Redis中,字符串可以作为键值对中的值,常用来存储...
总结:本教程详细介绍了Redis的五种数据类型在Java中的应用,包括字符串、哈希、列表、集合和有序集合。通过实例代码展示了如何使用Jedis API进行增删查改操作。对于Java开发者来说,掌握这些内容对于提升项目中的...
这些数据类型的特性使得Redis成为处理各种数据结构的理想选择,广泛应用于缓存、消息队列、发布订阅系统等多种场景。 1. String(字符串) - 字符串是最基础的数据类型,可以存储任意的二进制数据,如文本、图片等...
总的来说,Redis的数据类型丰富多样,能够满足各种应用场景的需求。理解并熟练运用这些类型,可以有效地设计出高效、灵活的解决方案。在实际开发中,根据业务需求选择合适的数据类型,将有助于提升系统的性能和扩展...