Redis学习笔记

5 阅读3分钟

简介

Redis是什么

  • 内存行NoSQL数据库,key-value存储
  • 速度极快:10w+QPS
  • 常用于:缓存、分布式锁、限流、计数器、消息队列、会话存储

Java开发最常用5种数据结构

  1. String:缓存对象、token、验证码
  2. Hash:用户信息、商品详情
  3. List:消息队列、时间线
  4. Set:去重、共同关注、抽奖
  5. ZSet:排行榜、热度排序

Java中怎么用Redis

  1. SpringBoot+Spring Data Redis
  2. 底层用Lettuce(默认)/Jedis
  3. 核心类:RedisTemplate、StringRedisTemplate

简单示例

@Autowired 
private StringRedisTemplate redisTemplate; 
// 存 
redisTemplate.opsForValue().set("user:1", "张三", 30, TimeUnit.MINUTES);
// 取
String name = redisTemplate.opsForValue().get("user:1");

Redis在Java项目真实工作流程

  1. 先查缓存,命中直接返回
  2. 未命中→查数据库
  3. 数据库结果写入缓存,设置过期时间
  4. 更新/删除时,删缓存或更新缓存

经典模式:Cache Aside Pattern(旁路缓存)

工作必须解决的4大问题(高频面试)

  1. 缓存穿透:查询不存在的数据→缓存空值+布隆过滤器
  2. 缓存击穿:热点Key过期→互斥锁、永不过期
  3. 缓存雪崩:大量Key同时过期→随机过期时间、集群、降级
  4. 缓存与数据库一致性:先更库,再删缓存

Redistribution高级功能(Java必备)

  • 分布式锁:Redisson(最常用)
  • 限流:Lua+计算器/漏桶/令牌桶
  • 延时队列:ZSet/Redisson Delayed Queue
  • 发布订阅:肩带消息通知
  • 持久化:RDB+AOF(保证启动不丢数据)

Java开发面试必问Redis极简总结

  • 为什么快?内存+IO多路复用+单线程避免锁
  • 内存淘汰策略:LRU、LFU、TTL
  • 集群方案:主从、哨兵、Redis Cluster
  • 并发安全:单线程+Lua原子性

下载安装Redis

一.Redis官网不提供Windows

从这下github.com/tporadowski…

找到Assets

下载:Redis-x64-5.0.14.1.msi(64 位系统,推荐)

二.安装Redis(.msi)

  1. 双击下载好的Redis-x64-5.0.14.1.msi
  2. 一路点Next
  3. 勾选Add Redis installation folder to PATH(自动添加环境变量,以后可以直接在 cmd 里用)
  4. 点击Install→Finish

三.启动Redis

  1. Win+R→cmd
  2. 输入 redis-server
  3. 看到 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