持久化就是把內存中的數據寫到磁盤中,防止服務宕機致使內存數據丟失。java
Redis 提供了兩種持久化的機制:RDB(默認)、AOF機制。面試
RDB是Redis默認的持久化方式。按照必定的時間
將內存的數據以快照的形式
保存到磁盤中,對應產生的數據文件爲 dump.rdb
. 經過配置文件中的save
參數來定義快照的週期。redis
它恢復時是將快照文件直接讀到內存裏。安全
Redis 會單獨 fork 一個子進程來進行持久化,會先將數據寫到一個臨時文件中,到持久化過程都結束了,再用這個臨時文件替換上次持久化好的文件。整個過程當中,主進程是不進行任何IO操做的。app
若是須要進行大規模的數據恢復,且對於數據恢復的完整性不是很是敏感,那RDB方式要比AOF方式更高效。RDB的缺點是最後一次持久化後的數據可能丟失。工具
AOF(Append Only File持久化),則是將Redis 每次執行的寫命令
記錄到單獨的日誌文件中,當重啓Redis時 會從新從持久化的日誌文件中恢復數據。學習
AOF持久化(即Append Only File持久化),則是將Redis執行的每次寫命令記錄到單獨的日誌文件中,當重啓Redis會從新將持久化的日誌中文件恢復數據。
AOF保存的是 appendonly.aof
文件。開發工具
當兩種方式同時開啓時,數據恢復 Redis 會優先選擇 AOF 恢復。.net
Redis事務的本質是:一組命令的集合。一個事務中的全部命令都會被序列化
,在事務的執行過程當中會按照順序執行。線程
Redis事務沒有隔離級別的概念。
全部的命令在事務中,並無直接被執行,只有發起執行命令的時候纔會被執行 EXEC
.
Redis 單條命令具備原子性,可是事務不保證原子性。
Redis事務的三個階段
MULTI
EXEC
Redis事務的相關命令:
Jedis 是Redis官方推薦的 java連接開發工具,使用Java操做Redis的中間件。
在SpringBoot2.x 以後,原來使用的jedis 被替換爲了 lettuce
。
自定義 RedisTemplete
@Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { // 咱們爲了本身開發方便,通常直接使用 <String, Object> RedisTemplate<String, Object> template = new RedisTemplate<String, Object>(); template.setConnectionFactory(factory); // Json序列化配置 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); // String 的序列化 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // key採用String的序列化方式 template.setKeySerializer(stringRedisSerializer); // hash的key也採用String的序列化方式 template.setHashKeySerializer(stringRedisSerializer); // value序列化方式採用jackson template.setValueSerializer(jackson2JsonRedisSerializer); // hash的value序列化方式採用jackson template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
文章學習自: