redis安裝參考:https://blog.csdn.net/weixin_41381863/article/details/88231397
數據結構及常用生產場景
1、String(字符串)--一個鍵最大能存儲512MB
字符串是最常用的數據類型,能夠存儲任何類型的字符串(即任意key-value),當然也包括二進制、json化的對象、甚至是Base64編碼之後的圖片。在Redis中一個字符串最大的容量爲512MB,可以說是無所不能了。
2、Hash(哈希)--每個 hash 可以存儲 2^32 - 1 鍵值對(40多億)
hash 是一個鍵值對集合。常用作存儲結構化數據,比如論壇系統中可以用來存儲用戶的ID、暱稱、頭像、積分等信息。如果需要修改其中的信息,只需要通過key取出value進行反序列化修改某一項的值,再序列化存儲到Redis中。
對於Hash結構存儲,由於Hash結構會在單個Hash元素在不足一定數量時進行壓縮存儲,所以可以大量節約內存。這一點在String結構裏是不存在的。
3、List(列表)--列表最多可存儲 2^32 - 1)元素 (4294967295, 每個列表可存儲40多億)
列表是簡單的字符串列表,按照插入順序排序(即順序是固定的)。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
Redis內部的很多實現,包括髮送緩衝隊列等也都是用的這個數據結構。另外,可以利用lrange命令,做基於Redis的分頁功能,性能極佳,用戶體驗好。
4、Set(集合)--集合中最大的成員數爲 2^32 - 1
Set是string類型的無序集合,集合是通過哈希表實現的,所以添加,刪除,查找的複雜度都是O(1)。
Set的特殊之處在於:自動排重。當你需要存儲一個列表數據時,又不希望出現重複的數據,那麼Redis的Set是最好的選擇。
5、Sorted Set(有序集合)
與Set一樣都是自動排重的,區別在於:每個元素都會關聯一個double類型的分數(分數可以重複)。redis正是通過分數來爲集合中的成員進行從小到大的排序。通常用作排行榜。
Redis的事務
redis的事務主要由三個命令組成:multi、exec和discard。
mutli--類似於begin transaction的意思,即開始事務。那麼在此命令之後的所有操作都會被綁定在一起。
exec--類似於commit的意思,即提交。
discard--類似於rollback的意思,即回滾。
在Spring redis中的操作示例:
//StringRedisTemplate
@Test
public void method() {
//開啓事務支持 默認爲false
redisTemplate.setEnableTransactionSupport(true);
redisTemplate.multi();//開始事務
redisTemplate.opsForValue().set("name1", "zhangsan");
redisTemplate.opsForValue().set("name2", "lisi");
// redisTemplate.discard();//回滾
redisTemplate.exec();//提交
System.out.println("done");
}
Redis持久化與恢復
RDB和AOF
1、RDB
RDB方式是Redis默認就開啓的持久化方式。在配置文件中有如下一段信息:
save 900 1 ###每900S至少有一條發生數據變化即持久化
save 300 10 ###每300s至少有10條數據發生變化即持久化
save 60 10000 ###每60s至少有10000條數據發生變化即持久化
從這裏可以看出,假設 在上次持久化之後的10s內變動了1000條數據後宕機,這1000條數據就會丟失。
RDB持久化的時候,會阻塞主線程的工作,對性能有一定影響。
2、AOF方式(修改配置後,需要重啓Redis)
AOF是需要手動開啓的。AOF開啓後,持久化文件以.aof後綴命名,和配置文件.conf在同一路徑下。在配置文件中有如下一段信息:
如上所示:最安全的方式就是每修改一次就持久化一次。
3、恢復數據
a、RDB方式是默認的,所以重啓之後會恢複相關數據。
b、AOF---如果數據是手動誤刪,比如執行flushall,需要進入.aof文件,刪除其中的flushall命令,重啓redis即可恢復數據。