<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
有兩種儲存資料的方式:
方案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
工具類程式碼
@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的註解版本
詳細介紹見另一篇部落格:連結
方式1:直接清除Redis的快取,重新讀取資料庫即可
方式2:使用mq非同步訂閱mysql binlog實現增量同步
方式3:使用alibaba的canal 框架
全量同步:就是每天定時(避開高峰期)或者採用一個週期實現將資料拷貝到一個地方也就是Rdb儲存。
增量同步:比如採用對行為的操作實現對資料的同步,也就是AOF。
全量與增量的比較:增量同步比全量同步更加消耗伺服器的記憶體,但是能夠更加的保證資料的同步。
Redis提供了兩種持久化的機制,分別為RDB、AOF實現,RDB採用定時(全量)持久化機制,但是伺服器因為某種原因宕機後可能資料會丟失,AOF是基於資料紀錄檔操作實現的持久化,所以AOF採用增量同步的方案。
Redis已經幫助我預設開啟了rdb儲存,兩種模式可以同時開啟,生產環境中一般兩種模式都會開啟,優先使用AOF。
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 在Redis的組態檔中存在三種同步方式,它們分別是:
appendfsync always #每次有資料修改發生時都會寫入AOF檔案,能夠保證資料不丟失,但是效率非常低。
appendfsync everysec #每秒鐘同步一次,可能會丟失1s內的資料,但是效率非常高。
appendfsync no #從不同步。高效但是資料不會被持久化。
直接修改redis.conf中 appendonly yes
建議最好還是使用 everysec 既能夠保證資料的同步、效率也還可以**。AOF是以執行命令的形式實現同步**
兩者區別
到此這篇關於Springboot整合Redis與資料持久化的文章就介紹到這了,更多相關Springboot整合Redis內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45