Redis
redis是基于内存的高速缓存,NoSQL数据库。
缓存,是处理数据库性能问题的最常见策略之一。将数据库查询的结果保存在更快,更容易访问的位置(如内存)。将减少查询响应时间,减少数据库负载并降低成本。
概念
-
category:存储类别,用于指定某一类存储数据,可以类比的理解为数据库中的一张表,具有统一的过期时间,统一由框架设置,无需用户进一步的设置。
-
key:存储的键,用于唯一定位一个value。
-
value:存储的值,经序列化后存储在后端存储中。 可以是String、list、set、sortedSet、Hash类型
-
- 例:category名为upload-stats,用来存储上传文件的计数;key为dataset1/subset2,表示数据集;value为hash类型,使用不同field存储对应的值。
特点
- 高性能:基于内存运行,低延迟,高吞吐量。
- 多数据结构:支持字符串、哈希、列表、集合、有序集合等多种数据结构。
- 持久化:支持将数据保存到磁盘,防止数据丢失。
- 高可用:支持主从复制、哨兵模式和集群模式,实现高可用和扩展性。
- 丰富功能:如发布/订阅、Lua 脚本、事务、TTL(Key过期)、管道(Pipelining)等。
- 支持分布式
- 操作具有原子性
数据类型
redis是key-value存储系统,value的类型主要有五种:string(字符串)、list(列表)、set(集合)、hash(哈希)、zset(有序集合)。
-
string:它是一个二进制安全的字符串,意味着它不仅能够存储字符串、还能存储图片、视频等多种类型, 最大长度支持512M
- hash:该类型是由field和关联的value组成的map。其中,field和value都是字符串类型的。
数据结构 |
类型 |
适用场景 |
备注 |
---|---|---|---|
String |
String |
Value 较小,模型简单的业务场景 |
Redis的 String 是二进制安全的,没有任何限制(基于此强烈不建议将任何数据都丢到String中)。 |
Bitmap |
(1) 用户签到; |
|
|
HyperLogLog |
海量数据总数统计,可以容忍一定的误差 |
|
|
Hash |
/ |
(1) 适合存储对象类型数据; |
|
List |
/ |
(1) 顺序插入,获取最近数据。或者分页查询; |
|
Set |
/ |
(1) 数据去重; |
|
SortedSet |
Zset |
排名/排行榜 |
|
GEO |
地理位置信息 |
|
应用场景
- 缓存系统:存储热点数据(高频读、低频写),提升性能
- 计数器:分布式系统中使用redis的自增自减操作计数,避免并发安全问题
- 分布式锁:分布式系统中加锁
- 消息队列系统
- 排行榜
- 社交网络和实时系统。
使用
Jedis 和 Redisson 都是Java中对Redis操作的封装。
Jedis:原生java Redis客户端,简单的封装了 Redis操作 的java API库,它的方法和Redis 的命令很类似。优点是简单易用、性能高、直接封装 Redis 命令
Redisson:高级 Redis 客户端,提供分布式和可扩展的数据结构,提供丰富的数据结构和分布式服务支持,如分布式锁、分布式集合、队列、执行器等,相比于Jedis 更加大。但Jedis相比于Redisson 更原生一些,更灵活。
注意的点
1、主从复制(集群)
2、持久化:缓存也需要小心处理,因为它们实际上是在另一个位置创建另一个信息副本。保持数据库和缓存同步并保持最新可能比您预期的更棘手。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY