Redis 6.0学习指南
文章目錄
- Redis 6.0學習指南
- 第一章 引言
- Redis簡介
- Redis高性能因素
- 使用Redis可能遇到的問題
- Redis下載
- 基本配置
- 啟動redis
- 第二章 數據庫與鍵
- Key
- 重命名
- 隨機返回一個鍵
- 鍵過期
- 查看過期時間
- 清除過期時間
- 遍歷鍵
- 全量遍歷鍵
- 漸進式遍歷
- Database
- 相關配置
- 常用命令
- 第三章 通訊協議RESP
- 舉個例子
- 返回結果格式
- 附錄
- 附錄a. 網站資料
- 網站收錄
- 官方網站
- 國內社區
- Github
- [antirez 博客](http://antirez.com/latest/0)
- [Redis 擴展模塊](https://redis.io/modules)
- 附錄b. 書籍推薦
- 使用類
- 源碼類
Redis 6.0學習指南
第一章 引言
Redis簡介
??Redis 是一個開源(BSD許可)、基于內存、高性能的數據結構,可以作為K-V數據庫、緩存、消息代理(message broker)和流引擎。
??Redis提供了許多數據結構,諸如String、Hash、List、Set、Sorted Set、BitMap、Hyperloglog、Geospatial index和Stream。
Redis高性能因素
- 純內存存儲
- 單線程操作,避免了頻繁的上下文切換
- 采用了非阻塞I/O多路復用機制
使用Redis可能遇到的問題
- 緩存和數據庫雙寫一致性問題
- 緩存雪崩問題
- 緩存擊穿問題
- 緩存的并發競爭問題
Redis下載
??Redis 使用標準版本標記進行版本控制:major.minor.patchlevel。偶數的版本號表示穩定的版本, 例如 1.2,2.0,2.2,2.4,2.6,2.8,奇數的版本號用來表示非標準版本。
??Redis官方下載地址:https://redis.io/download/
基本配置
redis啟動這一塊不會出啥問題,這邊就直接復制老博客內容了。
修改redis.windows.conf文件,設置maxmemory 大小
#maxmemorty <bytes> maxmemorty 1024000000設置redis密碼
#requirepass foobared requirepass 123456啟動redis
redis-server.exe redis.windows.conf將redis加入到windows的服務中(service和loglevel前都是兩個-)
redis-server –service-install redis.windows.conf –loglevel verbose第二章 數據庫與鍵
Key
重命名
rename key newKey如果在rename之前,鍵java已經存在,那么它的值也將被覆蓋。
為了防止被rename覆蓋,Redis提供了renamenx命令,確保只有newKey不存在時候才被覆蓋。
隨機返回一個鍵
randomkey鍵過期
//鍵在seconds秒后過期 expire key seconds //鍵在秒級時間timestamp后過期 expireat key timestamp//鍵在milliseconds毫秒后過期 pexpire key milliseconds //鍵在毫秒級時間戳timestamp后過期 pexpireat key milliseconds-timestamp但無論是使用過期時間還是時間戳,秒級還是毫秒級,在Redis內部最終使用的都是pexpireat。
查看過期時間
//查詢鍵的剩余過期時間 秒級 ttl key //查詢鍵的剩余過期時間 毫秒級 pttl key有3種返回值:
- 大于等于0的整數:鍵剩余的過期時間(ttl是秒,pttl是毫秒)。
- -1:鍵沒有設置過期時間。
- -2:鍵不存在。
清除過期時間
persist key遍歷鍵
??當數據量較小時,可以使用Keys命令返回所有滿足條件的Key集合。但是當數據量較大時,由于此命令通過遍歷匹配key所以很容易阻塞Redis服務;另外由于不能使用limit命令,Keys命令會返回所有匹配數據,導致輸出過多,所以生產環境一般不使用此命令。
全量遍歷鍵
keys patternKEYS * 匹配數據庫中所有 key 。
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
KEYS h*llo 匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
漸進式遍歷
scan cursor [match pattern] [count number]??cursor是必需參數,實際上cursor是一個游標,第一次遍歷從0開始,每次scan遍歷完都會返回當前游標的值,直到游標值為0表示遍歷結束。
??match pattern是可選參數,它的作用的是做模式的匹配,這點和keys的模式匹配很像。
??count number是可選參數,它的作用是表明每次要遍歷的鍵個數,默認值是10,此參數可以適當增大。
Database
??Redis中默認有16個相互空間獨立的數據庫(Database)。每個數據庫都有一個整數類型id,新客戶端默認選擇的數據庫是id為0的數據庫。
typedef struct redisDb {dict *dict; /* The keyspace for this DB */dict *expires; /* Timeout of keys with a timeout set */dict *blocking_keys; /* Keys with clients waiting for data (BLPOP)*/dict *ready_keys; /* Blocked keys that received a PUSH */dict *watched_keys; /* WATCHED keys for MULTI/EXEC CAS */int id; /* Database ID */long long avg_ttl; /* Average TTL, just for stats */unsigned long expires_cursor; /* Cursor of the active expire cycle. */list *defrag_later; /* List of key names to attempt to defrag one by one, gradually. */ } redisDb;相關配置
??數據庫的數量可以在配件文件中,通過databases參數進行配置。
# Set the number of databases. The default database is DB 0, you can select # a different one on a per-connection basis using SELECT <dbid> where # dbid is a number between 0 and 'databases'-1 databases 16常用命令
切換數據庫
??可以通過調用select [id]的命令來改變當前客戶端所選數據庫,如下所示。隨后,所有的命令將使用DB2,直到再次切換到另一個數據庫下。每個數據庫都有屬于自己的空間,不必擔心之間的key沖突。不同的數據庫下,相同的key取到各自的值。
select 2清除當前數據庫
flushdb清除所有數據庫
flushall第三章 通訊協議RESP
??Redis制定了RESP(REdis Serialization Protocol, Redis序列化協議) 實現客戶端與服務端的正常交互,這種協議簡單高效,既能夠被機器解析,又容易被人類識別。
舉個例子
??"set hell world"基于RESP格式化之后的結果是:
*3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5\r\nworld\r\n??格式化之后:
$3 SET $5 hello $5 world??換行符 \r\n 用于區分命令請求的若干參數,*3表示該命令請求有3個參數,$3、$5 和 $5 表示該參數字符串長度。
返回結果格式
??Redis的返回結果類型分為以下五種,
- 狀態回復 在RESP中第一個字符為“+”。
- 錯誤回復 在RESP中第一個字符為“-”。
- 整數回復 在RESP中第一個字符為“:”。
- 字符串回復 在RESP中第一個字符為“$”。
- 多條字符串回復 在RESP中第一個字符為“*”。
附錄
附錄a. 網站資料
網站收錄
官方網站
Redis 官網文檔非常豐富,它的文檔非常值得啃。Redis官網的精華文章都在頂部導航Documentation連接中。
國內社區
如果你的英文不佳,可以去看看中文Redis網站。
Github
github項目地址
antirez 博客
Redis 作者 antirez 大佬的博客有很多關于 Redis 的最新消息,除此之外還會有一些作者新發現的、好玩的技術知識點。
Redis 擴展模塊
Redis 4.0 增加了模塊化之后,越來越多的 Redis 模塊雨后春筍般的被開發出來。這個頁面包含了開源市場上所有的 Redis 模塊列表,有一些模塊比較穩定,還有一些處于 Alpha 階段。讀者可以從中挑選出自己感興趣的模塊研究學習。
附錄b. 書籍推薦
使用類
《Redis開發與運維》 付磊
源碼類
《Redis設計與實現》 黃健宏
《Redis5設計與源碼分析》 陳雷
總結
以上是生活随笔為你收集整理的Redis 6.0学习指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS重力感应
- 下一篇: 依赖注入之针对不同类型变量的几种注入方式