1redis支援的資料型別?
string(字串型別)string資料結構是簡單的key-value型別,value其實不僅可以是string,也可以是數字。 常規key-value快取應用; 常規計數:微博數,粉絲數等。
常用命令: set,get,incr,decr,mget 等:set key value 設定值、 get key 獲取值、 incr key 加一、 decr key 減一
hash(雜湊)
redis hash是乙個string型別的field和value的對映表,hash特別適合用於儲存物件,後續操作的時候,你可以直接僅僅修改這個物件中的某個欄位的值。
常用命令: set,get,decr,incr,mget 等:
hset key field value 設定值
hget key field 獲取值
hincrby key field num 設定增數量
list(列表)
redis list 的實現為乙個雙向鍊錶,即可以支援反向查詢和遍歷,更方便操作,不過帶來了部分額外的記憶體開銷。
redis list 的應用場景非常多,也是redis最重要的資料結構之一,比如微博的關注列表,粉絲列表,訊息列表等功能都可以用redis的 list 結構來實現。
可以通過 lrange 命令,就是從某個元素開始讀取多少個元素,可以基於 list 實現分頁查詢,這個很棒的乙個功能,基於 redis 實現簡單的高效能分頁,可以做類似微博那種下拉不斷分頁的東西(一頁一頁的往下走),效能高。
常用命令: lpush,rpush,lpop,rpop,lrange等:
lpush list a b c d (從list左邊新增元素)、 rpush list 1 2 3 4 (從list右邊新增元素)
lrange list 0 -1(從0 到 -1 元素檢視:也就表示檢視所有)
lpop list (從list左邊取,刪除)、 rpop list (從list右邊取,刪除)
set(集合)
redis的set是string型別的無序集合。集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是o(1)。
常用命令: zadd,zrange,zrem,zcard等:
zadd zset1 1 a 2 b 3 c (新增元素 zadd key score member,這裡新增元素a:1分、元素b:2分、元素c:3分 )
zrange zset1 0 -1 (檢視zset1的所有元素,預設從小到大)
zrange zset1 0 -1 withscores (檢視zset1的所有元素,包括分數score)
zrevrange zset1 0 -1 (檢視zset1的所有元素,從大到小)
zincrby zset1 5 a (對zset1的a元素增加5分)
2.什麼是redis持久化?redis有哪幾種持久化方式?優缺點是什麼3redis 有哪些架構模式?講講各自的特點?
主從模式(redis2.8版本之前的模式)、哨兵sentinel模式(redis2.8及之後的模式)、redis cluster模式(redis3.0版本之後)
4什麼是快取穿透?如何避免?什麼是快取雪崩?何如避免
1.快取穿透: 大量查詢快取中不存在的key,資料庫中也不存在的key時。
2.如何避免:
1.再快取中存放乙個null的物件,並且設定較短的時間。
2.使用bloomfilter,相當有乙個大的bitmap物件,裡面存放了所有的key值。
快取雪崩:
當快取伺服器重啟或者大量快取集中在某乙個時間段失效,這樣在失效的時候,會給後端系統帶來很大壓力。導致系統崩潰。
1.在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量。比如對某個key只允許乙個執行緒查詢資料和寫快取,其他執行緒等待。
2:搭建集群
3:不同的key,設定不同的過期時間,讓快取失效的時間點盡量均勻
redis常見問題
在redis命令列執行info clients 得到類似下面的結果 connected clients 357 client longest output list 0client biggest input buf 0blocked clients 0redis連線數過多的問題可以參考 處理red...
redis常見問題
redis使用中可能出現的一些問題 1.快取穿透 快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時需要從db查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫查詢,從而造成快取穿透。解決辦法 持久層查詢不到就快取空結果,查詢時先判斷快取中是否exists key 如果...
Redis常見問題
1.如何解決快取雪崩?2.如何解決快取穿透?3.如何保證快取與資料庫雙寫時一致的問題?1.1 什麼是快取雪崩?回顧一下我們為什麼要用快取 redis 現在有個問題,如果我們的快取掛掉了,這意味著我們的全部請求都跑去資料庫了。我們都知道redis不可能把所有的資料都快取起來 記憶體昂貴且有限 所以re...