SpringBoot 中使用Redis缓存
SpringBoot 中使用Redis缓存
在项目中我们访问数据通常的操作就是访问数据库的方式,但是如果访问量很大而且特别频繁会对数据库造成压力,甚至导致数据库直接崩溃。为了解决这类的问题,redis框架逐渐出现在我们的视野里
1.Redis特点
- Redis是一个高性能(支持并发11万读8万写)的key-value存储系统。
- 支持丰富的存储value类型,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
- Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
- 虽然运行在内存,同时支持持久化。提供两种方式:1保存到数据文件.rdb安全性高,但对效率有影响。2保存对数据有影响的操作命令到.aof中,保存操作命令的频率可配置,比较灵活,效率高。
- 支持订阅发布功能(subscribe/publish)
- Redis 很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。
2.Redis数据结构介绍
Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。
结构类型 | 结构存储的值 | 读写能力 |
String | 可以是字符串、整数或者浮点数 | 对整个字符串或者字符串的其中一部分执行操作;对象和浮点数执行自增(increment)或者自减(decrement) |
List | 一个链表,链表上的每个节点都包含了一个字符串 | 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值来查找或者移除元素 |
Set | 包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同 | 添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集;从集合里卖弄随机获取元素 |
Hash | 包含键值对的无序散列表 | 添加、获取、移除单个键值对;获取所有键值对 |
Zset | 字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定 | 添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素 |
3.安装Redis
3.1 windows安装
https://laoniu.blog.csdn.net/article/details/111402929
3.2 linux安装
https://laoniu.blog.csdn.net/article/details/111402989
3.3 docker安装
https://laoniu.blog.csdn.net/article/details/110012616
4.SpringBoot中使用Redis
4.1 环境版本
- 开发工具:Intellij IDEA 2020.2.3
- springboot:2.3.7.RELEASE
- jdk:1.8.0_211
- maven: 3.6.3
4.2 项目结构
4.3 在pom.xml添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
4.4 在application.yml新增配置
#redis配置
spring:
redis:
host: 127.0.0.1 #Redis服务器地址
port: 6379 #Redis服务器连接端口
database: 0 #Redis数据库索引(默认为0)
jedis:
pool:
max-active: 50 #连接池最大连接数(使用负值表示没有限制)
max-wait: 3000 #连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 2 #连接池中的最小空闲连接
min-idle: 20 #连接池中的最大空闲连接
timeout: 5000 #连接超时时间(毫秒)
4.5 编写操作redis的工具类 RedisUtil
package com.niu.springbootredis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
/**
* @description: RedisUtils
* @author: nxq email: niuxiangqian163@163.com
* @createDate: 2020/12/19 12:28 下午
* @updateUser: nxq email: niuxiangqian163@163.com
* @updateDate: 2020/12/19 12:28 下午
* @updateRemark:
* @version: 1.0
**/
@Component
public class RedisUtil {
@Autowired
private RedisTemplate<String, String> redisTemplate;
/**
* 读取缓存
*
* @param key
* @return
*/
public String get(final String key) {
return redisTemplate.opsForValue().get(key);
}
/**
* 写入缓存
*/
public boolean set(final String key, String value) {
boolean result = false;
try {
redisTemplate.opsForValue().set(key, value);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 更新缓存
*/
public boolean getAndSet(final String key, String value) {
boolean result = false;
try {
redisTemplate.opsForValue().getAndSet(key, value);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 删除缓存
*/
public boolean delete(final String key) {
boolean result = false;
try {
redisTemplate.delete(key);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
4.6 编写测试类进行测试
package com.niu.springbootredis;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
class SpringbootRedisApplicationTests {
@Autowired
private RedisUtil redisUtil;
String key = "key";
@Test
public void testSet() {
redisUtil.set(key, "aaa");
}
@Test
public void testGet(){
System.out.println(redisUtil.get(key));
}
}
4.7 查看redis数据
执行下testSet方法 然后进入redis看是否插入成功,建议使用RedisDesktopManager可视化工具进行查看
5.总结
本篇是对springboot操作redis最简单的介绍,redis的功能作用远不止这些
代码已经推送至github: https://github.com/NiuXiangQian/springboot-redis
正文到此结束
相关文章
热门推荐
评论插件初始化中...