網站首頁 編程語言 正文
Springboot整合Redis
有兩種存儲數據的方式:
方案1:在Redis存放一個對象 使用json序列化與反序列化
方案2:直接使用redis自帶序列化方式存儲對象
maven依賴
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> </parent> <dependencies> <!-- 集成commons工具類 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <!-- 集成lombok 框架 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.30</version> </dependency> <!-- SpringBoot-整合Web組件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies>
yml文件配置
spring: redis: host: www.kaicostudy.com password: 123456 port: 6379
使用json方式存儲
工具類代碼
@Component
public class RedisUtils {
@Autowired
private StringRedisTemplate stringRedisTemplate;
public void setString(String key, String value) {
setString(key, value, null);
}
public void setString(String key, String value, Long timeOut) {
stringRedisTemplate.opsForValue().set(key, value);
if (timeOut != null) {
stringRedisTemplate.expire(key, timeOut, TimeUnit.SECONDS);
}
}
public String getString(String key) {
return stringRedisTemplate.opsForValue().get(key);
}
}
控制層
@RestController
public class IndexController {
@Autowired
private RedisUtils redisUtils;
@RequestMapping("/setRedis")
public void setRedisKey(UserEntity userEntity) {
redisUtils.setString("userEntity", JSONObject.toJSONString(userEntity));
}
@RequestMapping("/getRedis")
public UserEntity setRedisKey() {
String userEntityJson = redisUtils.getString("userEntity");
UserEntity userEntity = JSONObject.parseObject(userEntityJson, UserEntity.class);
return userEntity;
}
}
存儲方式:
序列化方式存儲數據
注意需要序列化的對象一定要實現Serializable接口
工具類
@Componentpublic class RedisTemplateUtils {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> @Resource private RedisTemplate<String, Object> redisTemplate; public void setObject(String key, Object object) {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> redisTemplate.opsForValue().set(key, object); } public Object getObjet(String key) {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> return redisTemplate.opsForValue().get(key); }}@Component
public class RedisTemplateUtils {
@Resource
private RedisTemplate<String, Object> redisTemplate;
public void setObject(String key, Object object) {
redisTemplate.opsForValue().set(key, object);
}
public Object getObjet(String key) {
return redisTemplate.opsForValue().get(key);
}
}
控制層測試
@RestController
public class IndexController {
@Autowired
private RedisTemplateUtils redisTemplateUtils;
@RequestMapping("/setRedisSerializable")
public void setRedisSerializable(UserEntity userEntity) {
redisTemplateUtils.setObject("userEntity", userEntity);
}
@RequestMapping("/getRedisSerializable")
public UserEntity getRedisSerializable() {
UserEntity userEntity = (UserEntity) redisTemplateUtils.getObjet("userEntity");
return userEntity;
}
}
序列化存儲:
SpringBoot整合Redis的注解版本
詳細介紹見另一篇博客:鏈接
MySQL與Redis一致性解決同步問題
方式1:直接清除Redis的緩存,重新讀取數據庫即可
方式2:使用mq異步訂閱mysql binlog實現增量同步
方式3:使用alibaba的canal 框架
Redis持久化機制
全量同步與增量同步
全量同步:就是每天定時(避開高峰期)或者采用一個周期實現將數據拷貝到一個地方也就是Rdb存儲。
增量同步:比如采用對行為的操作實現對數據的同步,也就是AOF。
全量與增量的比較:增量同步比全量同步更加消耗服務器的內存,但是能夠更加的保證數據的同步。
RDB與AOF
Redis提供了兩種持久化的機制,分別為RDB、AOF實現,RDB采用定時(全量)持久化機制,但是服務器因為某種原因宕機后可能數據會丟失,AOF是基于數據日志操作實現的持久化,所以AOF采用增量同步的方案。
Redis已經幫助我默認開啟了rdb存儲,兩種模式可以同時開啟,生產環境中一般兩種模式都會開啟,優先使用AOF。
RDB
Redis默認采用rdb方式實現數據的持久化,以快照的形式將數據持久化到磁盤的是一個二進制的文件dump.rdb, 在redis.conf文件中搜索“dump.rdb “。
Redis會將數據集的快照dump到dump.rdb文件中。此外,也可以通過配置文件來修改Redis服務器dump快照的頻率,在打開配置文件之后,搜索save,可以看到下面的配置信息:
save 900 1 ? ?#在900秒(15分鐘)之后,如果至少有1個key發生變化,則dump內存快照。
save 300 10 ? #在300秒(5分鐘)之后,如果至少有10個key發生變化,則dump內存快照。
save 60 10000 ?#在60秒(1分鐘)之后,如果至少有10000個key發生變化,則dump內存快照。
AOF
AOF 在Redis的配置文件中存在三種同步方式,它們分別是:
appendfsync always ? ? #每次有數據修改發生時都會寫入AOF文件,能夠保證數據不丟失,但是效率非常低。?
appendfsync everysec ?#每秒鐘同步一次,可能會丟失1s內的數據,但是效率非常高。
appendfsync no ? ? ? ? ?#從不同步。高效但是數據不會被持久化。
直接修改redis.conf中 appendonly yes
建議最好還是使用 everysec 既能夠保證數據的同步、效率也還可以**。AOF是以執行命令的形式實現同步**
兩者區別
原文鏈接:https://blog.csdn.net/weixin_44044929/article/details/125323074
相關推薦
- 2022-05-31 詳解Flutter如何繪制曲線,折線圖及波浪動效_Android
- 2022-10-07 Qt入門學習之數據庫操作指南_C 語言
- 2022-07-30 Yarn調度器與調度算法
- 2022-12-30 解決React報錯The?tag?is?unrecognized?in?this?browser_R
- 2022-05-18 Python?pandas?計算每行的增長率與累計增長率_python
- 2022-08-30 MongoDB數據庫權限管理詳解_MongoDB
- 2022-06-25 python多進程和多線程介紹_python
- 2022-09-29 Kotlin協程launch原理詳解_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支