Redis在实际开发中有哪些应用场景?
Redis在实际开发中有哪些应用场景?下面我将结合Redisson来演示Redis在热点数据缓存、计数器、队列、发布/订阅、分布式锁…等场景下的应用。
热点数据缓存
热点数据缓存是Redis应用最多的场景,就是将需要频繁访问的数据(包括不限于热点新闻、商品信息,复杂对象等)存储在Redis中,减少对数据库的访问压力。
现在带领大家一起从零到一,从简到繁演示Redis应用场景。
案例环境
- JDK 11
- SpingBoot 2.6.13
- Redisson
这里要说明下为什么选择Redisson,不用Springboot自带的Jedis?首先相比于Jedis,Redisson帮我们封装了很多高级功能,如分布式锁、分布式信号量、发布/订阅等,同时增加了对原子Long、Set、List、Map等高级数据结构的支持。在分布式,高并发场景下Redisson的绝大多数操作都是线程安全的。
当然如果我们只是使用redis的简单操作,如数据缓存,session缓存等,使用jedis还是更方便点。
话不多说,进入正题:
-
新建项目:
注意:现在通过SpringInitializr创建Springboot项目可能无法选择java11和java8,这里我们可以改一下上图服务器URL处的设置,将服务器地址改成https://start.aliyun.com
选择Springboot版本:2.6.13
-
添加redison依赖
<!-- Redisson --> <!-- 指定一个兼容的版本 --> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.17.6</version> <!-- 根据实际情况选择版本 --> </dependency>
这里要注意下引入的版本一定要一致,不然会报错。具体的对应关系如下:
如果Springboot版本是2.xx,引入的redisson-spring-boot-starter
中依赖的redisson-spring-data
版本必须保持是redisson-spring-data-2x具体办法可以查看POM中的依赖redisson-spring-boot-starter
,如下:
ctrl+左键进入redisson-spring-boot-starter
pom里面,查看redisson-spring-data-2版本是否符合要求。
-
Redisson配置
Redison支持多种配置方式,具体参考Redisson官网在项目
application.yml
中配置:server: port: 8080 spring: redis: redisson: file: classpath:redisson.yml #这里指定redisson配置路径,在redisson.yml中统一管理
resource目录下新建
redisson.yml
:singleServerConfig: idleConnectionTimeout: 10000 connectTimeout: 10000 timeout: 3000 retryAttempts: 3 retryInterval: 1500 password: null subscriptionsPerConnection: 5 clientName: null address: "redis://192.168.8.95:6379" #修改成自己的redis地址,如果是哨兵模式、集群模式参考官网配置案例 subscriptionConnectionMinimumIdleSize: 1 subscriptionConnectionPoolSize: 50 connectionMinimumIdleSize: 24 connectionPoolSize: 64 database: 0 dnsMonitoringInterval: 5000 threads: 8 nettyThreads: 2 codec: !<org.redisson.codec.JsonJacksonCodec> {} transportMode: "NIO"
到这里准备工作就完成了,可以开始撸代码了:
在test目录下新建测试类
HotDataTests
:package com.example.redisdemo; import org.junit.jupiter.api.Test; import org.redisson.api.RBucket; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class HotDataTests { @Autowired private RedissonClient redissonClient; @Test public void HotDataSetTest(){ RBucket<Object> testBucket = redissonClient.getBucket("testKey"); testBucket.set("testValue"); } @Test public void HotDataGetTest() { RBucket<Object> testBucket = redissonClient.getBucket("testKey"); System.out.println("========" + testBucket.get() + "========"); } }
运行HotDataSetTest可以看到数据已经写入到redis中
运行HotDataGetTest可以看到写入redis中的数据:
- 在这里附上Redisson官网,更多关于Redisson的问题可以在官网上查看
- 同时这里附上CSDN专家整理的Redisson中文文档