很多博客只講了五大基本類型,確實,是最常用的,而且百分之九十的程序員對于Redis只限于了解String這種最常用的。但是我個人認為,既然Redis官方提供了其他的數據類型,肯定是有相應的考量的,在某些特殊的業務場景中,這些特殊的類型還是能夠給我們多一種解決思路!
Geospatial: 地理位置
georadius(查詢附近位置)操作
再Redis中,可能會有一定的誤差性。 官方給出的誤差率是0.81%。
如果在實際業務中,允許一定的誤差值,我們可以使用基數統計來計算~效率非常高
Hyperloglog:?基數
Bitmap:?位存儲
127.0.0.1:6379> setbit login 1 1 #添加周一已登陸 為1
(integer) 0
127.0.0.1:6379> setbit login 2 1
(integer) 0
127.0.0.1:6379> setbit login 3 1
(integer) 0
127.0.0.1:6379> setbit login 4 0 #添加周四已登陸 為0
(integer) 0
127.0.0.1:6379> setbit login 5 0
(integer) 0
127.0.0.1:6379> setbit login 6 1
(integer) 0
127.0.0.1:6379> setbit login 7 0
(integer) 0
127.0.0.1:6379> getbit login 1 #獲取周一是否登錄
(integer) 1
127.0.0.1:6379> getbit login 4 #獲取周四是否登陸
(integer) 0
127.0.0.1:6379> bitcount login #統計這周登陸的天數
(integer) 4
總結:實際需求中,可能需要我們統計用戶的登陸信息,員工的打卡信息等等。只要是事務的只有兩個狀態的,我們都可以用Bitmap來進行操作!!!
您提供的是一個Redis服務器的配置文件內容。以下是對每項配置的中文解釋:
- **bind 0.0.0.0**:Redis監聽所有可用的網絡接口(包括本地回環和所有外部網絡接口)。
- **protected-mode no**:關閉保護模式,這允許從任何主機連接到Redis,除非進一步配置了訪問控制(如密碼)。
- **port 6379**:設置Redis監聽的端口號。
- **tcp-backlog 511**:設置TCP連接的backlog隊列大小。這通常設置為高于一般系統默認值以處理大量連接。
- **timeout 0**:客戶端空閑時間(秒),0表示關閉這個功能,不會斷開空閑連接。
- **tcp-keepalive 300**:TCP連接保持活躍的時間間隔(秒),用于檢測對方是否還保持連接狀態。
- **daemonize yes**:Redis以守護進程的方式運行,即在后臺運行。
- **pidfile /var/run/redis_6379.pid**:當Redis以守護進程方式運行時,PID文件的路徑。
- **loglevel notice**:日志級別設置為notice,適度詳細的日志級別,通常用于生產環境。
- **logfile "./redis.log"**:日志文件的路徑。相對路徑表示在當前工作目錄下。
- **databases 16**:設置數據庫的數量。Redis默認有16個數據庫(編號0-15)。
- **always-show-logo no**:啟動時是否顯示Redis的ASCII藝術LOGO。
- **set-proc-title yes**:是否設置進程標題,這有助于監控和識別Redis實例。
- **proc-title-template "{title} {listen-addr} {server-mode}"**:設置進程標題的格式。
- **stop-writes-on-bgsave-error yes**:如果后臺保存(BGSAVE)出錯,停止寫入操作。
- **rdbcompression yes**:對RDB文件進行壓縮。
- **rdbchecksum yes**:在寫入RDB文件時,加入CRC64校驗和,以增加數據完整性檢查。
- **dbfilename dump.rdb**:RDB文件的名稱。
- **rdb-del-sync-files no**:在完成RDB文件保存后,是否刪除舊的RDB文件。
- **dir ./**:工作目錄,RDB文件和AOF文件將保存在此目錄。
- **masterauth abc123**:如果Redis作為從節點,當連接到主節點時使用的密碼。
- **replica-serve-stale-data yes**:如果從節點與主節點失去連接,是否繼續提供可能過期的數據。
- **replica-read-only yes**:從節點是否為只讀。
- **repl-diskless-sync no**:是否啟用無盤復制(直接從主節點復制到從節點內存,不經過磁盤)。
- **repl-diskless-sync-delay 5**:無盤復制的延遲時間(秒)。
- **repl-disable-tcp-nodelay no**:是否在復制連接上禁用TCP_NODELAY選項。
- **replica-priority 100**:從節點的優先級,用于Sentinel(哨兵)系統選擇新的主節點- **acllog-max-len 128**:ACL日志的最大長度。
- **requirepass abc123**:設置連接Redis所需的密碼。
- **lazyfree-lazy-* no**:一系列關于是否異步釋放數據的配置,全部設置為否意味著數據釋放是同步的。
- **oom-score-adj no** 和 **oom-score-adj-values 0 200 800**:調整Redis在OOM(Out of Memory) killer下的優先級。設置為no表示不調整。
- **disable-thp yes**:禁用透明大頁(Transparent Huge Pages),這通常可以減少內存碎片。
- **appendonly no**:是否啟用AOF(Append Only File)持久化模式。
- **appendfilename "appendonly.aof"**:AOF文件名。
- **appendfsync everysec**:AOF文件的fsync策略,每秒同步一次。
- **no-appendfsync-on-rewrite no**:在AOF重寫期間,是否在每次寫入后調用fsync。
- **auto-aof-rewrite-percentage 100** 和 **auto-aof-rewrite-min-size 64mb**:自動AOF重寫的條件,基于文件大小增長百分比和最小文件大小。
- **aof-load-truncated yes**:如果AOF文件結尾損壞,啟動時是否加載這個文件。
- **aof-use-rdb-preamble yes**:AOF文件是否以RDB格式開始,這使得AOF文件可以兼容RDB的加載方式。
- **lua-time-limit 5000**:Lua腳本的最大執行時間(毫秒)。
- **slowlog-log-slower-than 10000**:定義什么是慢查詢(微秒),超過此時間的查詢將被記錄。
- **slowlog-max-len 128**:慢查詢日志的最大長度。
- **latency-monitor-threshold 0**:延遲監控閾值(毫秒),0表示用。
- **notify-keyspace-events ""**:鍵空間通知的事件類型,空字符串表示不通知。
- **hash-max-ziplist-entries 512** 和 **hash-max-ziplist-value 64**:哈希數據結構使用ziplist的閾值。
- **list-max-plist-size -2** 和 **list-compress-depth 0**:列表數據結構的配置,影響列表的存儲和壓縮方式。
- **set-max-intset-entries 512**:集合數據結構使用intset的閾值。
- **zset-maxziplist-entries 128** 和 **zset-max-ziplist-value 64**:有序集合使用ziplist的閾值。
- **hll-sp-max-bytes 3000**:HyperLogLog稀疏表示的最大字節數。
- **stream-node-max-bytes 4096** 和 **stream-node-max-entries 100**:流數據結構的節點大小限制。
- **activerehashing yes**:是否啟用主動rehashing。
- **client-output-buffer-limit**:不同類型客戶端(普通、副本、發布訂閱)的輸出緩沖區限制。
- **hz 10**:Redis調用內部函數檢查空閑連接和執行其他周期性操作的頻率。
- **dynamic-hz yes**:是否動態調整hz值,根據客戶端連接的活躍度。
- **aof-rewrite-incremental-fsync yes**:在AOF重寫時,是否增量調用fsync。
- **rdb-save-incremental-fsync yes**:在RDB保存時,是否增量調用fsync。
- **jemalloc-bg-thread yes**:是否使用jemalloc后臺線程來管理內存,這有助于減少內存碎片和提高性能。
Jedis是Redis官方推薦的Java連接開發工具!
雖然現在的SpringBoot2.×版本已經將Jedis換成了Lettuce
行家有木有!出手就知道啊!
Redis配置對大小寫不敏感!
主從復制,是指將一臺Redis服務器的數據,復制到其他的Redis服務器。前者稱為主節點(master/leader),后者稱為從節點(slave/follower);數據的復制是單向的,只能由主節點到從節點。Master以寫為主,Slave 以讀為主。
在Redis集群中我們講到了,主機斷開后,我們得手動設置另一個從機變成主機!這是不智能的!在實際工作中,我們都是用哨兵模式來自動切換主機。通俗點講,就是自己去選擇‘大哥’!
哨兵集群,基于主從復制模式 ,所有的主從配置優點,它全有
戶需要查詢一個數據,但是redis中沒有(比如說mysql中id=-1的數),直接去請求MySQL