Springboot整合Redis與數(shù)據(jù)持久化
Springboot整合Redis
有兩種存儲(chǔ)數(shù)據(jù)的方式:
方案1:在Redis存放一個(gè)對(duì)象 使用json序列化與反序列化
方案2:直接使用redis自帶序列化方式存儲(chǔ)對(duì)象
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方式存儲(chǔ)
工具類代碼
@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; } }
存儲(chǔ)方式:
序列化方式存儲(chǔ)數(shù)據(jù)
注意需要序列化的對(duì)象一定要實(shí)現(xiàn)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); } }
控制層測(cè)試
@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; } }
序列化存儲(chǔ):
SpringBoot整合Redis的注解版本
詳細(xì)介紹見另一篇博客:鏈接
MySQL與Redis一致性解決同步問題
方式1:直接清除Redis的緩存,重新讀取數(shù)據(jù)庫即可
方式2:使用mq異步訂閱mysql binlog實(shí)現(xiàn)增量同步
方式3:使用alibaba的canal 框架
Redis持久化機(jī)制
全量同步與增量同步
全量同步:就是每天定時(shí)(避開高峰期)或者采用一個(gè)周期實(shí)現(xiàn)將數(shù)據(jù)拷貝到一個(gè)地方也就是Rdb存儲(chǔ)。
增量同步:比如采用對(duì)行為的操作實(shí)現(xiàn)對(duì)數(shù)據(jù)的同步,也就是AOF。
全量與增量的比較:增量同步比全量同步更加消耗服務(wù)器的內(nèi)存,但是能夠更加的保證數(shù)據(jù)的同步。
RDB與AOF
Redis提供了兩種持久化的機(jī)制,分別為RDB、AOF實(shí)現(xiàn),RDB采用定時(shí)(全量)持久化機(jī)制,但是服務(wù)器因?yàn)槟撤N原因宕機(jī)后可能數(shù)據(jù)會(huì)丟失,AOF是基于數(shù)據(jù)日志操作實(shí)現(xiàn)的持久化,所以AOF采用增量同步的方案。
Redis已經(jīng)幫助我默認(rèn)開啟了rdb存儲(chǔ),兩種模式可以同時(shí)開啟,生產(chǎn)環(huán)境中一般兩種模式都會(huì)開啟,優(yōu)先使用AOF。
RDB
Redis默認(rèn)采用rdb方式實(shí)現(xiàn)數(shù)據(jù)的持久化,以快照的形式將數(shù)據(jù)持久化到磁盤的是一個(gè)二進(jìn)制的文件dump.rdb, 在redis.conf文件中搜索“dump.rdb “。
Redis會(huì)將數(shù)據(jù)集的快照dump到dump.rdb文件中。此外,也可以通過配置文件來修改Redis服務(wù)器dump快照的頻率,在打開配置文件之后,搜索save,可以看到下面的配置信息:
save 900 1 #在900秒(15分鐘)之后,如果至少有1個(gè)key發(fā)生變化,則dump內(nèi)存快照。
save 300 10 #在300秒(5分鐘)之后,如果至少有10個(gè)key發(fā)生變化,則dump內(nèi)存快照。
save 60 10000 #在60秒(1分鐘)之后,如果至少有10000個(gè)key發(fā)生變化,則dump內(nèi)存快照。
AOF
AOF 在Redis的配置文件中存在三種同步方式,它們分別是:
appendfsync always #每次有數(shù)據(jù)修改發(fā)生時(shí)都會(huì)寫入AOF文件,能夠保證數(shù)據(jù)不丟失,但是效率非常低。
appendfsync everysec #每秒鐘同步一次,可能會(huì)丟失1s內(nèi)的數(shù)據(jù),但是效率非常高。
appendfsync no #從不同步。高效但是數(shù)據(jù)不會(huì)被持久化。
直接修改redis.conf中 appendonly yes
建議最好還是使用 everysec 既能夠保證數(shù)據(jù)的同步、效率也還可以**。AOF是以執(zhí)行命令的形式實(shí)現(xiàn)同步**
兩者區(qū)別
到此這篇關(guān)于Springboot整合Redis與數(shù)據(jù)持久化的文章就介紹到這了,更多相關(guān)Springboot整合Redis內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot整合Redis實(shí)現(xiàn)消息發(fā)布與訂閱的示例代碼
- SpringBoot整合Redis使用@Cacheable和RedisTemplate
- docker搭建redis哨兵集群并且整合springboot的實(shí)現(xiàn)
- SpringBoot詳解整合Spring?Cache實(shí)現(xiàn)Redis緩存流程
- SpringBoot詳解如何整合Redis緩存驗(yàn)證碼
- springboot整合redis之消息隊(duì)列
- SpringBoot整合redis中的JSON序列化文件夾操作小結(jié)
- SpringBoot2.7.14整合redis7的詳細(xì)過程
相關(guān)文章
redis數(shù)據(jù)一致性的實(shí)現(xiàn)示例
所謂的redis數(shù)據(jù)一致性即當(dāng)進(jìn)行修改或者保存、刪除之后,redis中的數(shù)據(jù)也應(yīng)該進(jìn)行相應(yīng)變化,本文主要介紹了redis數(shù)據(jù)一致性,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Redis核心原理與實(shí)踐之字符串實(shí)現(xiàn)原理
這本書深入地分析了Redis常用特性的內(nèi)部機(jī)制與實(shí)現(xiàn)方式,內(nèi)容源自對(duì)Redis源碼的分析,并從中總結(jié)出設(shè)計(jì)思路、實(shí)現(xiàn)原理。對(duì)Redis字符串實(shí)現(xiàn)原理相關(guān)知識(shí)感興趣的朋友一起看看吧2021-09-09redis 實(shí)現(xiàn)登陸次數(shù)限制的思路詳解
這篇文章主要介紹了redis 實(shí)現(xiàn)登陸次數(shù)限制的思路詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08Redis實(shí)現(xiàn)分布式鎖方法詳細(xì)
在單體應(yīng)用中,如果我們對(duì)共享數(shù)據(jù)不進(jìn)行加鎖操作,會(huì)出現(xiàn)數(shù)據(jù)一致性問題,我們的解決辦法通常是加鎖。在分布式架構(gòu)中,我們同樣會(huì)遇到數(shù)據(jù)共享操作問題。本文將介紹Redis實(shí)現(xiàn)分布式鎖的五種方式。需要的可以參考一下2021-12-12Redis實(shí)現(xiàn)分布式隊(duì)列淺析
Redis將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,使得讀寫速度非???,經(jīng)常被用來做緩存系統(tǒng),這里我們將redis用來做一個(gè)分布式的消息隊(duì)列。這篇文章主要介紹了使用redis來作為消息隊(duì)列,并且進(jìn)行分布式主從配置,有需要的朋友可以參考借鑒,下面來一起看看吧。2016-11-11