Redis經典知識點

2021-09-24 19:24:24 字數 3406 閱讀 2886

redis是什麼?

redis是乙個開源的,使用c語言編寫的,支援網路互動的,可基於記憶體也可持久化的key-value儲存系統。

什麼是redis持久化?redis有哪幾種持久化方式?優缺點是什麼?使用redis有哪些好處?

資料儲存在記憶體中,讀寫速度快;

支援的資料型別資源豐富;

支援事務,操作都是原子性操作;

可以設定資料存活的生命週期。

redis支援哪幾種資料型別?

1、 string(字串),最基本的資料型別,二進位制安全的字串,乙個鍵最大能儲存512mb。

格式:set key value(設定)

格式:get key(獲取)

2、 list(列表),是簡單的字串列表,按照插入順序排序。

格式:lpush name value(每個元素都新增到列表最左端)

格式:lpushx name value(只有name存在時,值新增到列表的最左端)

格式:llen name(元素個數)

格式:linsert name befor/after refvaleu value(refvalue值前或者後插入乙個新值)

格式:lset name index value(某乙個索引未知重新賦值)

格式:lrem name value num(刪除指定值,num:0所有,1前往後1,-1後往前)

格式:lpop name(獲取第乙個元素並在列表中刪除)

格式:lindex name index(根據索引獲取元素)

格式:lrange name start end(獲取start-end索引之間的值)

格式:ltrim name start end(刪除沒有在start-end索引之間的值)

3、 hash(雜湊),key-value對的一種集合。

格式:hset name key value(設定乙個鍵值對)

格式:hmset name key1 value1 key2 value2(批量設定鍵值對)

格式:hget name key(獲取乙個key的值)

格式:hmget name key1 key2(獲取多個key的值)

格式:hgetall name(獲取所有鍵值)

格式:hlen name(獲取鍵值對的個數)

格式:hkeys name(獲取所有key的值)

格式:hvals name(獲取所有value的值)

格式:hexists name key(判斷是否存在指定key)

格式:hdel name key(刪除指定key的鍵值對)

4、 set(集合),無序的字串集合,不存在重複的元素。

格式:sadd name value1 value2(設定,自動去重)

格式:smembers name(獲取所有元素)

格式:scard name(獲取元素個數)

格式:srem name value(刪除指定集合元素)

格式:srandmember name count(隨機出幾個元素)

格式:spop name (隨機出乙個元素並刪除)

5、 zset(sorted sety有序集合),有序的字串集合。

格式:zadd name score value(設定)

格式:zrangebyscore name min max(按區間讀取)

格式:zrangebyscore name -inf inf(查出所有的資料)

格式:zrangebyscore name -inf 5 withscores(查詢score<=5的資料含score)

格式:zremrangebyscore name min max(刪除資料)

格式:zrem name value(刪除指定資料)

訊息佇列

作用:非同步、解耦、削峰。

在業務的實現過程中,就算沒有大量的流量,解耦和非同步化幾乎也是處處可用,此時mq就顯得尤為重要。但與此同時mq也是乙個重量級的元件,在中小型業務的開發過程中,過重的元件服務也會成倍增加工作量,所幸的是,redis提供的list資料結構非常適合做訊息佇列。

redis實現訊息佇列的兩種方式:redis佇列模式、redis發布訂閱模式。

redis佇列模式實現原理:

訊息佇列通過redis 的 list(列表)來實現。

redis佇列模式(兩種命令方式,均滿足 先進先出 的佇列模式):lpush rpop :非阻塞式 、lpush brpop :阻塞式 ( 推薦此種方式 ,阻塞讀在佇列沒有資料的時候,會立即進入休眠狀態,一旦資料到來,則立刻醒過來)。

訊息延時佇列:

延時佇列可以通過 redis 的 zset(有序集合) 來實現,主要用到了 redis 的三個命令,zadd、zrem 和 zrangebyscore。。

實現思路:

zadd 用於向有序集合中新增一條或多條資料,score 作為資料處理時間(當前時間戳+多少秒後處理資料),value 存放資料(不能重複)。

zrangebyscore 用於獲取有序集合中指定時間範圍內的資料(小於當前時間)

zrem 用於將一條或多條資料從有序集合中移除。

計數器

型別:string

命令:incr有預設的增長值 1;incrby 必須指定乙個增長值,不然會報錯;

命令:decr有預設的減少值 1;decrby 必須指定乙個減少值,不然會報錯;

快取穿透,快取擊穿,快取雪崩原因+解決方案

快取穿透: 快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為「-1」的資料或id為特別大不存在的資料。這時的使用者很可能是攻擊者,攻擊會導致資料庫壓力過。

解決方案:

1、介面層增加校驗,如id<=0直接攔截。

2、使用布隆過濾器,把所有不合法值快取起來。

3、如果快取和資料庫中都沒有的資料,這時也可以將key-value對寫為key-null,快取有效時間可以設定短點,如30秒(設定太長會導致正常情況也沒法使用)。

快取擊穿:快取擊穿是指快取中沒有但資料庫中有的資料(一般是快取時間到期),這時由於併發使用者特別多,同時讀快取沒讀到資料,又同時去資料庫去取資料,引起資料庫壓力瞬間增大。

解決方案:

1、使用互斥鎖,就是在快取失效的時候(判斷拿出來的值為空),不是立即去資料庫讀資料,而是先使用互斥鎖,其他並行的執行緒等待幾秒,再重新去快取讀資料,這樣就防止都去資料庫重複取資料,重複往快取中更新資料情況出現。

2、設定熱點資料永遠不過期。

快取雪崩: 快取雪崩是指快取中資料大批量到過期時間,而查詢資料量巨大,引起資料庫壓力過大甚至宕機。

解決方案:

1、快取資料的過期時間設定隨機,防止同一時間大量資料過期現象發生。

2、設定熱點資料永遠不過期。

Mysql 經典知識點

表鎖 table lock 對整張表加讀寫鎖,讀鎖可以之間不會相互阻塞,但是當有寫鎖時,任何使用者都不可以獲取讀鎖 並且寫鎖比讀鎖的優先順序高,乙個寫的命令可能被插入讀命令之前.行級鎖 row lock 行級鎖對每一行新增讀寫鎖,這樣可以實現最大程度地支援併發處理,但是也有最大的鎖開銷.乙個事務時最...

redis知識點小結

這兩天和哥們聊天,他說最近在面試中頻頻被問到關於redis的相關問題,不可否認,目前非關係型資料庫的使用很普遍,尤其是redis更是被很多網際網路公司所鍾愛,面試中也成為了肯定會被問到的乙個點。剛好今天有抽出點時間,就對我所認識的redis的簡單的知識點做一些小小的總結。我們在了解乙個新鮮事物 新的...

Redis 框架知識點

redis 1.特點 效能極高 記憶體型資料庫,讀寫速度極快 豐富的資料型別 可以資料持久化 出於效能考慮,不是高可靠 設定過期時間 可以進行資料淘汰 不完整的事務 無法回滾,資料一致性無法保證 2.使用場景 對速度有要求,並可能需要設定過期時間,主要用於資料快取 3.客戶端 服務端 命令 啟動re...