目录
什么是Redis?
Redis的应用场景
Redis的常用指令
Redis的持久化机制
缓存穿透、缓存击穿与缓存雪崩
1.缓存穿透
2.缓存击穿
3.缓存雪崩
后续会持续更新!!!
什么是Redis?
Redis是一个开源的、使用ANSI C语言编写的高性能Key-Value数据库,支持网络通信,并且可以基于内存运行,同时也支持持久化存储。
Redis还支持地理位置(Geo)数据结构以及一些高级功能,如键过期、发布订阅、Lua脚本、事务和流水线等。
两种持久化方式:RDB(Redis DataBase)和AOF(Append Only File)。
Redis单线程模型效率为什么也能这么高?
- C语言实现,效率高
- 纯内存操作
- 基于非阻塞的IO复用模型机制
- 单线程的话就能避免多线程的频繁上下文切换问题
- 丰富的数据结构(全称采用hash结构,读取速度非常快,对数据存储进行了一些优化,比如亚
- 索表,跳表等)
Redis的应用场景
缓存:Redis可以作为缓存系统,将经常访问的数据存储到内存中,加快响应速度。支持各种数据结构的读写操作,并提供高性能的数据存取能力。
分布式锁:Redis的原子性操作和高效性能使其非常适合作为分布式锁的实现工具。可以使用Redis的SETNX(set if not exist)的命令和过期时间设置来实现分布式锁的功能。
消息队列:Redis提供了发布/订阅功能,可以作为消息队列系统的使用。发布者将消息发布到指定的频道,订阅者可以通过订阅相同频道来接收消息,实现消息的异步处理。
计数器和排行榜:
- 使用 INCR 和 INCRBY 命令实现计数器:
- INCR 命令将键的整数值增加1。
- INCRBY 命令将键的整数值增加指定的增量。
- 使用 SORT 命令实现排行版:
- SORT 命令可以根据一个或多个键的值来排序集合中的元素。
- 使用 ZINCRBY 命令增加有序集合中成员的分数,并保持排序:
- ZINCRBY 命令将成员的分数增加指定的浮点数。
- 使用 LPUSH/RPUSH 和 LRANGE 命令创建列表排行版:
- LPUSH/RPUSH 命令在列表的头部/尾部添加一个或多个值。
- LRANGE 命令获取列表中指定范围内的元素。
分布式会话存储:
-
使用Redis作为会话存储:将用户的会话信息(例如用户ID,用户名,登录状态等)存储在Redis数据库中。
-
使用Redis集群或者分片(sharding)来保证可伸缩性和高可用性。
-
使用Redis提供的EXPIRE功能来设置会话的过期时间。
地理位置定位:
在Java中,可以使用Jedis库来实现Redis的地理位置功能。以下是一个简单的例子,展示了如何使用Jedis在Java中设置和查询地理位置信息:
首先,确保你的项目中包含了Jedis依赖。如果你使用Maven,可以在pom.xml
中添加以下依赖:
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>最新版本</version>
</dependency>
然后,你可以使用以下代码来设置和查询地理位置信息: