简介
Redis是什么
- 内存行NoSQL数据库,key-value存储
- 速度极快:10w+QPS
- 常用于:缓存、分布式锁、限流、计数器、消息队列、会话存储
Java开发最常用5种数据结构
- String:缓存对象、token、验证码
- Hash:用户信息、商品详情
- List:消息队列、时间线
- Set:去重、共同关注、抽奖
- ZSet:排行榜、热度排序
Java中怎么用Redis
- SpringBoot+Spring Data Redis
- 底层用Lettuce(默认)/Jedis
- 核心类:RedisTemplate、StringRedisTemplate
简单示例
@Autowired
private StringRedisTemplate redisTemplate;
// 存
redisTemplate.opsForValue().set("user:1", "张三", 30, TimeUnit.MINUTES);
// 取
String name = redisTemplate.opsForValue().get("user:1");
Redis在Java项目真实工作流程
- 先查缓存,命中直接返回
- 未命中→查数据库
- 数据库结果写入缓存,设置过期时间
- 更新/删除时,删缓存或更新缓存
经典模式:Cache Aside Pattern(旁路缓存)
工作必须解决的4大问题(高频面试)
- 缓存穿透:查询不存在的数据→缓存空值+布隆过滤器
- 缓存击穿:热点Key过期→互斥锁、永不过期
- 缓存雪崩:大量Key同时过期→随机过期时间、集群、降级
- 缓存与数据库一致性:先更库,再删缓存
Redistribution高级功能(Java必备)
- 分布式锁:Redisson(最常用)
- 限流:Lua+计算器/漏桶/令牌桶
- 延时队列:ZSet/Redisson Delayed Queue
- 发布订阅:肩带消息通知
- 持久化:RDB+AOF(保证启动不丢数据)
Java开发面试必问Redis极简总结
- 为什么快?内存+IO多路复用+单线程避免锁
- 内存淘汰策略:LRU、LFU、TTL
- 集群方案:主从、哨兵、Redis Cluster
- 并发安全:单线程+Lua原子性
下载安装Redis
一.Redis官网不提供Windows
找到Assets
下载:Redis-x64-5.0.14.1.msi(64 位系统,推荐)
二.安装Redis(.msi)
- 双击下载好的Redis-x64-5.0.14.1.msi
- 一路点Next
- 勾选Add Redis installation folder to PATH(自动添加环境变量,以后可以直接在 cmd 里用)
- 点击Install→Finish
三.启动Redis
- Win+R→cmd
- 输入
redis-server - 看到
Ready to accept connections就是启动成功。
四.测试
打开新的CMD,输入:
redis-cli PING
返回PONG→成功!
注意
6379:Redis默认端口,完全不用改
Add an exception to the Windows Firewall:为 Windows 防火墙添加 Redis 例外
SpringBoot+Redis
打开IDEA→New→Project→SpringBoot→名字→类型:Maven→依赖选Spring Web→创建
第一步:打开pom.xml,加入Redis依赖
找到pom.xml
在里面写
<!--Redis 核心依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>Spring-boot-starter-data-redis</artifactId>
</dependency>
<!--连接池(必须加)-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
然后点右上角M图标刷新Maven(有着右键→Maven→Reload)
第二步:打开application.properites,加入Redis配置
找到:src/main/resources/application.properties
#redis 基本配置
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0
#关闭Redis自动配置
#重点:加了这句,就算你没开Redis,项目也能启动!不会超时!(注释了,避免出BUG,具需要使用)
#spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
项目→src→main→java→包→新建文件controller→RedisController.java
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RedisController {
@Autowired
private RedisTemplate redisTemplate;
// 存数据
@GetMapping("/redis/set")
public String set() {
redisTemplate.opsForValue().set("username", "zhangsan");
return "存入Redis成功"; }
// 取数据
@GetMapping("/redis/get")
public String get() {
return "取出的值:" + redisTemplate.opsForValue().get("username");
}
}
运行Application,然后在网页上访问
http://localhost:8080/redis/set
显示:存入Redis成功
再访问
http://localhost:8080/redis/get
取出的值:zhangsan