java -redis 面試題


一、Redis基礎概述

1、什么是Redis,有哪些優缺點?

Redis 是一個使用 C 語言編寫的,開源的高性能非關系型(NoSQL)的鍵值對數據庫。

Redis 可以存儲鍵和五種不同類型的值之間的映射。鍵的類型只能為字符串,值支持五種數據類型:字符串、列表、集合、散列表、有序集合。

Redis 的數據是存在內存中的,所以讀寫速度非常快,因此 redis 被廣泛應用於緩存方向,每秒可以處理超過 10萬次讀寫操作

Redis 支持事務 、持久化、LUA腳本、LRU驅動事件、多種集群方案。

整體的回答流程就是概念+基本數據類型+特點+可以做什么

(1)優點

讀寫速度快、支持持久化、數據結構豐富、支持主從復制。

(2)缺點

受物理內存的限制、不具備自動容錯和恢復功能、較難支持在線擴容

2、Redis為什么這么快

(1)完全基於內存,絕大部分請求是純粹的內存操作,非常快速。

(2)數據結構簡單,操作也簡單,Redis 中的數據結構是專門進行設計的;

(3)采用單線程,避免了不必要的上下文切換和競爭條件,也不存在多進程或者多線程導致的切換而消耗 CPU,不用去考慮各種鎖的問題

(4)使用多路 I/O 復用模型,非阻塞 IO;

(5)使用底層模型不同,它們之間底層實現方式以及與客戶端之間通信的應用協議不一樣,Redis 直接自己構建了 VM 機制 ,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求;

3、為什么要用 Redis 而不用 map/guava 做緩存?

緩存分為本地緩存和分布式緩存。以 Java 為例,使用自帶的 map 或者 guava 實現的是本地緩存,最主要的特點是輕量以及快速,生命周期隨着 jvm 的銷毀而結束,並且在多實例的情況下,每個實例都需要各自保存一份緩存,緩存不具有一致性。

使用 redis 或 memcached 之類的稱為分布式緩存,在多實例的情況下,各實例共用一份緩存數據,緩存具有一致性。

4、Redis與Memcached的區別

區別很多,有一張表,我覺得記不住,大概下面三種就可以:

(1) memcached所有的值均是簡單的字符串,redis作為其替代者,支持更為豐富的數據類型

(2) redis的速度比memcached快很多

(3) redis可以持久化其數據

5、Redis常見性能問題和解決方案?

(1)Master最好不要做任何持久化工作,包括內存快照和AOF日志文件,特別是不要啟用內存快照做持久化。

(2)如果數據比較關鍵,某個Slave開啟AOF備份數據,策略為每秒同步一次。

(3)為了主從復制的速度和連接的穩定性,Slave和Master最好在同一個局域網內。

(4)盡量避免在壓力較大的主庫上增加從庫

(5)Master調用BGREWRITEAOF重寫AOF文件,AOF在重寫的時候會占大量的CPU和內存資源,導致服務load過高,出現短暫服務暫停現象。

(6)為了Master的穩定性,主從復制不要用圖狀結構,用單向鏈表結構更穩定,即主從關系為:Master<–Slave1<–Slave2<–Slave3…,這樣的結構也方便解決單點故障問題,實現Slave對Master的替換,也即,如果Master掛了,可以立馬啟用Slave1做Master,其他不變。

二、數據類型

1、Redis有哪些數據類型,都在哪些場景中使用過?

Redis主要有5種數據類型,包括String,List,Set,Zset,Hash,滿足大部分的使用要求。

(1)string:適合最簡單的k-v存儲,類似於memcached的存儲結構,短信驗證碼,配置信息等,就用這種類型來存儲。

(2)hash:一般key為ID或者唯一標示,value對應的就是詳情了。如商品詳情,個人信息詳情,新聞詳情等。

(3)list:因為list是有序的,比較適合存儲一些有序且數據相對固定的數據。如省市區表、字典表等。因為list是有序的,適合根據寫入的時間來排序,如:最新的排名。

(4)set:可以簡單的理解為ID-List的模式,如微博中一個人有哪些好友,set最牛的地方在於,可以對兩個set提供交集、並集、差集操作。例如:查找兩個人共同的好友等。

(5)Sorted Set:是set的增強版本,增加了一個score參數,自動會根據score的值進行排序。比較適合類似於top 10等不根據插入的時間來排序的數據。

三、持久化技術(重點)

1、Redis 的持久化機制是什么?各自的優缺點?

Redis 提供兩種持久化機制 RDB(默認) 和 AOF 機制:

(1)RDB是Redis默認的持久化方式。按照一定的時間將內存的數據以快照的形式保存到硬盤中,對應產生的數據文件為dump.rdb。通過配置文件中的save參數來定義快照的周期。

優點:

1、只有一個文件 dump.rdb,方便持久化。

2、容災性好,一個文件可以保存到安全的磁盤。

3、性能最大化,fork 子進程來完成寫操作,讓主進程繼續處理命令,所以是 IO 最大化。使用單獨子進程來進行持久化,主進程不會進行任何 IO 操作,保證了 redis 的高性能

4.相對於數據集大時,比 AOF 的啟動效率更高。

缺點:數據安全性低。RDB 是間隔一段時間進行持久化,如果持久化之間 redis 發生故障,會發生數據丟失。所以這種方式更適合數據要求不嚴謹的時候)

(2)AOF持久化(即Append Only File持久化),則是將Redis執行的每次寫命令記錄到單獨的日志文件中,當重啟Redis會重新將持久化的日志中文件恢復數據。

優點:數據安全、可以解決數據一致性問題。

缺點:AOF 文件比 RDB 文件大,且恢復速度慢、比 rdb 啟動效率低。

2、如何選擇合適的持久化方式

(1)應該同時使用兩種持久化功能。在這種情況下,當 Redis 重啟的時候會優先載入AOF文件來恢復原始的數據,因為在通常情況下AOF文件保存的數據集要比RDB文件保存的數據集要完整。

(2)如果允許部分數據丟失,可以使用RDB方式,並且 RDB 恢復數據集的速度也要比AOF恢復的速度要快,除此之外,使用RDB還可以避免AOF程序的bug。

(3)如果你只希望你的數據在服務器運行的時候存在,你也可以不使用任何持久化方式。

3、Redis怎么擴容?

(1)如果Redis被當做緩存使用時,使用一致性哈希實現動態擴容縮容。

(2)如果Redis被當做一個持久化存儲使用,使用Redis集群進行擴容。

4、Redis如何做大量數據插入?

Redis2.6開始redis-cli支持一種新的被稱之為pipe mode的新模式用於執行大量數據插入工作。

5、假如Redis里面有1億個key,其中有10w個key是以某個固定的已知的前綴開頭的,如果將它們全部找出來?

使用keys指令可以掃出指定模式的key列表。
對方接着追問:如果這個redis正在給線上的業務提供服務,那使用keys指令會有什么問題?
這個時候你要回答redis關鍵的一個特性:redis的單線程的。keys指令會導致線程阻塞一段時間,線上服務會停頓,直到指令執行完畢,服務才能恢復。這個時候可以使用scan指令,scan指令可以無阻塞的提取出指定模式的key列表,但是會有一定的重復概率,在客戶端做一次去重就可以了,但是整體所花費的時間會比直接用keys指令長。

6、使用Redis做過異步隊列嗎,是如何實現的

使用list類型保存數據信息,rpush生產消息,lpop消費消息,當lpop沒有消息時,可以sleep一段時間,然后再檢查有沒有信息,如果不想sleep的話,可以使用blpop, 在沒有信息的時候,會一直阻塞,直到信息的到來。redis可以通過pub/sub主題訂閱模式實現一個生產者,多個消費者,當然也存在一定的缺點,當消費者下線時,生產的消息會丟失。

7、Redis如何實現延時隊列

使用sortedset,使用時間戳做score, 消息內容作為key,調用zadd來生產消息,消費者使用zrangbyscore獲取n秒之前的數據做輪詢處理。

四、過期刪除策略(重點)

1、Redis的過期鍵的刪除策略

過期策略通常有以下三種:

(1)定時過期:每個設置過期時間的key都需要創建一個定時器,到過期時間就會立即清除。該策略可以立即清除過期的數據,對內存很友好;但是會占用大量的CPU資源去處理過期的數據,從而影響緩存的響應時間和吞吐量。

(2)惰性過期:只有當訪問一個key時,才會判斷該key是否已過期,過期則清除。該策略可以最大化地節省CPU資源,卻對內存非常不友好。極端情況可能出現大量的過期key沒有再次被訪問,從而不會被清除,占用大量內存。

(3)定期過期:每隔一定的時間,會掃描一定數量的數據庫的expires字典中一定數量的key,並清除其中已過期的key。該策略是前兩者的一個折中方案。通過調整定時掃描的時間間隔和每次掃描的限定耗時,可以在不同情況下使得CPU和內存資源達到最優的平衡效果。

Redis中同時使用了惰性過期和定期過期兩種過期策略。

2、設置過期時間和永久有效的命令是什么?

EXPIRE和PERSIST命令

3、Redis的內存淘汰策略有哪些?

全局的鍵空間選擇性移除

(1)noeviction:當內存不足以容納新寫入數據時,新寫入操作會報錯。

(2)allkeys-lru:當內存不足以容納新寫入數據時,在鍵空間中,移除最近最少使用的key。(這個是最常用的)

(3)allkeys-random:當內存不足以容納新寫入數據時,在鍵空間中,隨機移除某個key。

設置過期時間的鍵空間選擇性移除

(1)volatile-lru:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,移除最近最少使用的key。

(2)volatile-random:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,隨機移除某個key。

(3)volatile-ttl:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,有更早過期時間的key優先移除。

在2.8.13的版本里,默認是noeviction,在3.2.3版本里默認是volatile-lru。

4、Redis如何做內存優化?

盡可能使用散列表(hashes),散列表(是說散列表里面存儲的數少)使用的內存非常小,所以你應該盡可能的將你的數據模型抽象到一個散列表里面。比如你的web系統中有一個用戶對象,不要為這個用戶的名稱,姓氏,郵箱,密碼設置單獨的key,而是應該把這個用戶的所有信息存儲到一張散列表里面。

五、Redis事務

1、Redis事務的概念?

Redis 事務的本質是通過MULTI、EXEC、WATCH等一組命令的集合。事務支持一次執行多個命令,一個事務中所有命令都會被序列化。在事務執行過程,會按照順序串行化執行隊列中的命令,其他客戶端提交的命令請求不會插入到事務執行命令序列中。

總結說:redis事務就是一次性、順序性、排他性的執行一個隊列中的一系列命令。

2、Redis事務的三個階段

事務開始 MULTI、命令入隊、事務執行 EXEC

3、Redis事務支持隔離性嗎

Redis 是單進程程序,並且它保證在執行事務時,不會對事務進行中斷,事務可以運行直到執行完所有事務隊列中的命令為止。因此,Redis 的事務是總是帶有隔離性的

4、Redis事務保證原子性嗎,支持回滾嗎?

Redis中,單條命令是原子性執行的,但事務不保證原子性,且沒有回滾。事務中任意命令執行失敗,其余的命令仍會被執行。

  1. 如果在一個事務中的命令出現錯誤,那么所有的命令都不會執行

  2. 如果在一個事務中出現運行錯誤,那么正確的命令會被執行

六、Redis集群

1、什么是哨兵

哨兵的介紹

sentinel,中文名是哨兵。哨兵是 redis 集群機構中非常重要的一個組件,主要有以下功能:

(1)集群監控:負責監控 redis master 和 slave 進程是否正常工作。

(2)消息通知:如果某個 redis 實例有故障,那么哨兵負責發送消息作為報警通知給管理員。

(3)故障轉移:如果 master node 掛掉了,會自動轉移到 slave node 上。

(4)配置中心:如果故障轉移發生了,通知 client 客戶端新的 master 地址。
哨兵用於實現 redis 集群的高可用,本身也是分布式的,作為一個哨兵集群去運行,互相協同工作。

哨兵的核心知識

(1)哨兵至少需要 3 個實例,來保證自己的健壯性。

(2)哨兵 + redis 主從的部署架構,是不保證數據零丟失的,只能保證 redis 集群的高可用性。

(3)對於哨兵 + redis 主從這種復雜的部署架構,盡量在測試環境和生產環境,都進行充足的測試和演練。

2、redis 集群模式的工作原理能說一下么?

Redis Cluster是一種服務端Sharding技術,3.0版本開始正式提供。Redis Cluster並沒有使用一致性hash,而是采用slot(槽)的概念,一共分成16384個槽。將請求發送到任意節點,接收到請求的節點會將查詢請求發送到正確的節點上執行。

3、分布式尋址都有哪些算法?

(1)hash 算法(大量緩存重建)

(2)一致性 hash 算法(自動緩存遷移)+ 虛擬節點(自動負載均衡)

(3)redis cluster 的 hash slot 算法

4、節點間如何通信?

集群元數據的維護有兩種方式:集中式、Gossip 協議。redis cluster 節點間采用 gossip 協議進行通信。

5、Redis Sharding如何實現的?

Redis Sharding是Redis Cluster出來之前,業界普遍使用的多Redis實例集群方法。其主要思想是采用哈希算法將Redis數據的key進行散列,通過hash函數,特定的key會映射到特定的Redis節點上。Java redis客戶端驅動jedis,支持Redis Sharding功能,即ShardedJedis以及結合緩存池的ShardedJedisPool

6、Redis 主從架構原理

單機的 redis,能夠承載的 QPS 大概就在上萬到幾萬不等。對於緩存來說,一般都是用來支撐讀高並發的。因此架構做成主從(master-slave)架構,一主多從,主負責寫,並且將數據復制到其它的 slave 節點,從節點負責讀。所有的讀請求全部走從節點。這樣也可以很輕松實現水平擴容,支撐讀高並發。

過程原理

(1)當從庫和主庫建立MS關系后,會向主數據庫發送SYNC命令

(2)主庫接收到SYNC命令后會開始在后台保存快照(RDB持久化過程),並將期間接收到的寫命令緩存起來

(3)當快照完成后,主Redis會將快照文件和所有緩存的寫命令發送給從Redis

(4)從Redis接收到后,會載入快照文件並且執行收到的緩存的命令

(5)之后,主Redis每當接收到寫命令時就會將命令發送從Redis,從而保證數據的一致

7、Redis集群會有寫操作丟失嗎?為什么?

Redis並不能保證數據的強一致性,這意味這在實際中集群在特定的條件下可能會丟失寫操作。

8、Redis集群之間是如何復制的?(異步復制)

9、Redis集群最大節點個數是多少?(16384)

10、Redis是單線程的,如何提高多核CPU的利用率?

可以在同一個服務器部署多個Redis的實例,並把他們當作不同的服務器來使用,在某些時候,無論如何一個服務器是不夠的, 所以,如果你想使用多個CPU,你可以考慮一下分片(shard)。

11、為什么要做Redis分區?

分區可以讓Redis管理更大的內存,Redis將可以使用所有機器的內存。如果沒有分區,你最多只能使用一台機器的內存。分區使Redis的計算能力通過簡單地增加計算機得到成倍提升,Redis的網絡帶寬也會隨着計算機和網卡的增加而成倍增長。

12、有哪些Redis分區實現方案?

(1)客戶端分區就是在客戶端就已經決定數據會被存儲到哪個redis節點或者從哪個redis節點讀取。大多數客戶端已經實現了客戶端分區。

(2)代理分區 意味着客戶端將請求發送給代理,然后代理決定去哪個節點寫數據或者讀數據。代理根據分區規則決定請求哪些Redis實例,然后根據Redis的響應結果返回給客戶端。redis和memcached的一種代理實現就是Twemproxy

(3)查詢路由(Query routing) 的意思是客戶端隨機地請求任意一個redis實例,然后由Redis將請求轉發給正確的Redis節點。Redis Cluster實現了一種混合形式的查詢路由,但並不是直接將請求從一個redis節點轉發到另一個redis節點,而是在客戶端的幫助下直接redirected到正確的redis節點。

13、Redis分區有什么缺點?

(1)涉及多個key的操作通常不會被支持。例如你不能對兩個集合求交集,因為他們可能被存儲到不同的Redis實例(實際上這種情況也有辦法,但是不能直接使用交集指令)。

(2)同時操作多個key,則不能使用Redis事務.

(3)分區使用的粒度是key,不能使用一個非常長的排序key存儲一個數據集

(4)當使用分區的時候,數據處理會非常復雜,例如為了備份你必須從不同的Redis實例和主機同時收集RDB / AOF文件。

(5)分區時動態擴容或縮容可能非常復雜。Redis集群在運行時增加或者刪除Redis節點,能做到最大程度對用戶透明地數據再平衡,但其他一些客戶端分區或者代理分區方法則不支持這種特性。然而,有一種預分片的技術也可以較好的解決這個問題。

14、Redis如何實現分布式鎖?

使用SETNX完成同步鎖的流程及事項如下:

使用SETNX命令獲取鎖,若返回0(key已存在,鎖已存在)則獲取失敗,反之獲取成功

為了防止獲取鎖后程序出現異常,導致其他線程/進程調用SETNX命令總是返回0而進入死鎖狀態,需要為該key設置一個“合理”的過期時間

釋放鎖,使用DEL命令將鎖數據刪除

15、如何解決 Redis 的並發競爭 Key 問題

所謂 Redis 的並發競爭 Key 的問題也就是多個系統同時對一個 key 進行操作,但是最后執行的順序和我們期望的順序不同,這樣也就導致了結果的不同!

推薦一種方案:分布式鎖(zookeeper 和 redis 都可以實現分布式鎖)。(如果不存在 Redis 的並發競爭 Key 問題,不要使用分布式鎖,這樣會影響性能)

zookeeper分布式鎖准備在今后的面試文章中提到。

16、分布式Redis是前期做還是后期規模上來了再做好?為什么?

既然Redis是如此的輕量(單實例只使用1M內存),為防止以后的擴容,最好的辦法就是一開始就啟動較多實例。即便你只有一台服務器,你也可以一開始就讓Redis以分布式的方式運行,使用分區,在同一台服務器上啟動多個實例。

一開始就多設置幾個Redis實例,例如32或者64個實例,對大多數用戶來說這操作起來可能比較麻煩,但是從長久來看做這點犧牲是值得的。

這樣的話,當你的數據不斷增長,需要更多的Redis服務器時,你需要做的就是僅僅將Redis實例從一台服務遷移到另外一台服務器而已(而不用考慮重新分區的問題)。一旦你添加了另一台服務器,你需要將你一半的Redis實例從第一台機器遷移到第二台機器。

17、什么是 RedLock

Redis 官方站提出了一種權威的基於 Redis 實現分布式鎖的方式名叫 Redlock,此種方式比原先的單節點的方法更安全。它可以保證以下特性:

(1)安全特性:互斥訪問,即永遠只有一個 client 能拿到鎖

(2)避免死鎖:最終 client 都可能拿到鎖,不會出現死鎖的情況,即使原本鎖住某資源的 client crash 了或者出現了網絡分區

(3)容錯性:只要大部分 Redis 節點存活就可以正常提供服務

18、如何保證緩存與數據庫雙寫時的數據一致性?

你只要用緩存,就可能會涉及到緩存與數據庫雙存儲雙寫,你只要是雙寫,就一定會有數據一致性的問題,那么你如何解決一致性問題?

(1)一般來說,就是如果你的系統不是嚴格要求緩存+數據庫必須一致性的話,緩存可以稍微的跟數據庫偶爾有不一致的情況,最好不要做這個方案,讀請求和寫請求串行化,串到一個內存隊列里去,這樣就可以保證一定不會出現不一致的情況

串行化之后,就會導致系統的吞吐量會大幅度的降低,用比正常情況下多幾倍的機器去支撐線上的一個請求。

(2)還有一種方式就是可能會暫時產生不一致的情況,但是發生的幾率特別小,就是先更新數據庫,然后再刪除緩存。

七、緩存異常

1、緩存雪崩

緩存雪崩是指緩存同一時間大面積的失效,所以,后面的請求都會落到數據庫上,造成數據庫短時間內承受大量請求而崩掉。

解決方案

(1)緩存數據的過期時間設置隨機,防止同一時間大量數據過期現象發生。

(2)一般並發量不是特別多的時候,使用最多的解決方案是加鎖排隊。

(3)給每一個緩存數據增加相應的緩存標記,記錄緩存的是否失效,如果緩存標記失效,則更新數據緩存。

2、緩存穿透

緩存穿透是指緩存和數據庫中都沒有的數據,導致所有的請求都落到數據庫上,造成數據庫短時間內承受大量請求而崩掉。

解決方案

(1)接口層增加校驗,如用戶鑒權校驗,id做基礎校驗,id<=0的直接攔截;

(2)從緩存取不到的數據,在數據庫中也沒有取到,這時也可以將key-value對寫為key-null,緩存有效時間可以設置短點,如30秒(設置太長會導致正常情況也沒法使用)。這樣可以防止攻擊用戶反復用同一個id暴力攻擊

(3)采用布隆過濾器,將所有可能存在的數據哈希到一個足夠大的 bitmap 中,一個一定不存在的數據會被這個 bitmap 攔截掉,從而避免了對底層存儲系統的查詢壓力。

3、緩存擊穿

緩存擊穿是指緩存中沒有但數據庫中有的數據(一般是緩存時間到期),這時由於並發用戶特別多,同時讀緩存沒讀到數據,又同時去數據庫去取數據,引起數據庫壓力瞬間增大,造成過大壓力。

和緩存雪崩不同的是,緩存擊穿指並發查同一條數據,緩存雪崩是不同數據都過期了,很多數據都查不到從而查數據庫。

解決方案

(1)設置熱點數據永遠不過期。

(2)加互斥鎖,互斥鎖

4、緩存預熱

緩存預熱就是系統上線后,將相關的緩存數據直接加載到緩存系統。這樣就可以避免在用戶請求的時候,先查詢數據庫,然后再將數據緩存的問題!用戶直接查詢事先被預熱的緩存數據!

解決方案

(1)直接寫個緩存刷新頁面,上線時手工操作一下;

(2)數據量不大,可以在項目啟動的時候自動進行加載;

(3)定時刷新緩存;

5、緩存降級

當訪問量劇增、服務出現問題(如響應時間慢或不響應)或非核心服務影響到核心流程的性能時,仍然需要保證服務還是可用的,即使是有損服務。系統可以根據一些關鍵數據進行自動降級,也可以配置開關實現人工降級。

緩存降級的最終目的是保證核心服務可用,即使是有損的。而且有些服務是無法降級的(如加入購物車、結算)。

在進行降級之前要對系統進行梳理,看看系統是不是可以丟卒保帥;從而梳理出哪些必須誓死保護,哪些可降級;比如可以參考日志級別設置預案:

(1)一般:比如有些服務偶爾因為網絡抖動或者服務正在上線而超時,可以自動降級;

(2)警告:有些服務在一段時間內成功率有波動(如在95~100%之間),可以自動降級或人工降級,並發送告警;

(3)錯誤:比如可用率低於90%,或者數據庫連接池被打爆了,或者訪問量突然猛增到系統能承受的最大閥值,此時可以根據情況自動降級或者人工降級;

(4)嚴重錯誤:比如因為特殊原因數據錯誤了,此時需要緊急人工降級。

服務降級的目的,是為了防止Redis服務故障,導致數據庫跟着一起發生雪崩問題。因此,對於不重要的緩存數據,可以采取服務降級策略,例如一個比較常見的做法就是,Redis出現問題,不去數據庫查詢,而是直接返回默認值給用戶。

6、緩存熱點key

緩存中的一個Key(比如一個促銷商品),在某個時間點過期的時候,恰好在這個時間點對這個Key有大量的並發請求過來,這些請求發現緩存過期一般都會從后端DB加載數據並回設到緩存,這個時候大並發的請求可能會瞬間把后端DB壓垮。

解決方案

(1)對緩存查詢加鎖,如果KEY不存在,就加鎖,然后查DB入緩存,然后解鎖;

(2)其他進程如果發現有鎖就等待,然后等解鎖后返回數據或者進入DB查詢

八、常用工具

1、Redis支持的Java客戶端都有哪些?官方推薦用哪個?

Redisson、Jedis、lettuce等等,官方推薦使用Redisson。

2、Redis和Redisson有什么關系?

Redisson是一個高級的分布式協調Redis客戶端,能幫助用戶在分布式環境中輕松實現一些Java的對象 。

3、Jedis與Redisson對比有什么優缺點?

Jedis是Redis的Java實現的客戶端,其API提供了比較全面的Redis命令的支持;Redisson實現了分布式和可擴展的Java數據結構,和Jedis相比,功能較為簡單,不支持字符串操作,不支持排序、事務、管道、分區等Redis特性。Redisson的宗旨是促進使用者對Redis的關注分離,從而讓使用者能夠將精力更集中地放在處理業務邏輯上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM