文章目錄
Redis-通用指令篇
Redis簡介
Redis是C語言開發的一個高性能鍵值對(key -value
) 內存數據庫,可以用作數據庫,緩存和消息中間件等。
特點
-
作爲內存數據庫,它的性能非常優秀,數據存儲在內存當中,讀寫速度非常快,支持併發10W QPS(每秒查詢次數),單進程單線程,是線程安全的,採用IO多路複用機制。
-
豐富的數據類型,支持字符串,散列,列表,集合,有序集合等,支持數據持久化。可以將內存中數據保存在磁盤中,重啓時加載。
-
主從複製,哨兵,高可用,可用作分佈式鎖。可以作爲消息中間件使用,支持發佈訂閱。
Redis——通用命令操作
key是什麼?
不同於上一篇所說的數據類型都是指Redis中value值的類型
value常用數據結構類型:string、list、hash、set、sorted_set
key 是一個字符串,在Redis中可以通過 key 來獲取 Redis 中保存的數據
Redis是key-value型數據庫
,
redis 中的 key 是二進制安全的,這意味着可以用任何二進制值作爲key,包括空字符串
key 值取值一般不要過長,在數據中查找這類 key 的計算成本較高,消耗內存。但是也不能過短,最好做到知名見意
針對key的一些常用操作?
1. 對於key的自身狀態控制的相關操作:
刪除指定key
del key // 成功 1 失敗 0
獲取key是否存在
exists key // 存在 1 不存在 0
獲取key類型
type key // 獲取顯示的是key對應value對應的數據結構的類型
2. 對於key的時效性相關操作:
時效性問題:
緩存雪崩:指某個時間段緩存中的key集體失效,造成了大流量直接訪問到數據庫,從而使數據庫壓力過大被壓垮,expire key seconds
解決:緩存時間隨機,使得它儘可能分散,避免它們同時失效,一般來說大熱門的數據緩存時間設置長一些,沒那麼熱門的設置短一些
緩存擊穿:指一個非常熱點的數據,不停的被高併發訪問,當這個key在時效的瞬間,大流量直接穿透緩存打到了數據庫上,就會造成數據庫被壓垮
解決:這些非常熱點的key設置爲永不過期 如:persist key
,其他方法如(互斥鎖:集羣下的SETNX 布隆過濾器等
)以後再討論。
緩存穿透:查一個數據庫不存在的數據,如用戶ID爲 -1
解決:緩存空值,數據庫查詢爲空的也放到緩存,然後設置一個較短的過期時間expire key seconds
如 60s
爲指定key設定有效期
expire key seconds // 以秒計 成功 1 失敗 0
pexpire key milliseconds // 以毫秒計...
expireat key timestamp // EXPIREAT 的作用和 EXPIRE 類似,都用於爲 key 設置過期時間。 不同在於 EXPIREAT 命令接受的時間參數是 UNIX 時間戳。
pexpireat key milliseconds-timestamp // 設置 key 過期時間的 UNIX 時間戳 以毫秒計
獲取key的有效時間
查看某個key的剩餘過期時間,返回值:
爲 -2 表示這個key已經過期,刪除掉
爲 -1 表示沒有設置過期時間
其它 表示剩餘的生存時間,單位爲秒
ttl key // 以秒爲單位
pttl key // 以毫秒爲單位
切換key的時效性爲永久
persist key // 成功 1 失敗 0
3. 對於key的查詢檢索相關操作:
獲取所有key
keys pattern // 模糊查找
pattern匹配規則
* 匹配任意數量的任意符號
? 配合一個任意符號
[] 匹配一個指定符號
命令 | 介紹 |
---|---|
keys * | 查詢所有,爲空則(empty list or set) |
keys it* | 查詢所有以it開頭的 |
keys *ame | 查詢所有以ame結尾 |
keys ??me | 查詢所有前面兩個字符任意,後面以me結尾 |
keys nam? | 查詢所有以nam開頭,最後一個字符任意 |
keys n[nm]e | 查詢所有以n開頭,以e結尾,中間包含一個字母,n或m |
4. 對於key的其他操作:
爲 key 改名
rename key newkey // 直接修改,當 key 和 newkey 相同,或者 key 不存在時,返回一個錯誤。
renamenx key newkey // 僅當 newkey 不存在時,將 key 改名爲 newkey 。
對所有 key 排序
sort key // 只是取出來排序返回結果,不會影響原來數據結構數據順序
在Redis中隨機返回一個 key
RANDOMKEY