redis相關知識 慢慢更新

2021-10-06 18:56:49 字數 2764 閱讀 1948

定義:

redis是乙個key-value儲存系統。支援string、list、set、zset和hash等資料型別。

作用:可以減輕資料庫的壓力,查詢記憶體比查詢資料庫效率高。

命令:redis -cil 連線本地的redis服務。

在遠端上執行命令:

redis -cli -h host -p port -a password 

儲存列表和集合。

type key ——用來獲取key的型別

keys pattern ——匹配所有符合模式的key

randomkey ——隨機返回乙個key

rename oldkey newkey ——重新命名

列表操作:

rpush key string ——將某個值加入乙個key列表的末尾

lpush key string ——將某個值加入乙個key列表的頭部

llen key ——獲取列表的長度

lrange key start end ——返回列表中某個範圍的值

ltrim key start end ——保留列表中某個範圍的值

lindex key index ——獲取列表中特定索引號的值

lset key index value ——設定列表中某個位置的值

lpop key/rpop key ——取頭取尾指令,可用於訊息佇列

集合操作:

sadd key member ——增加元素

srem key member ——刪除元素

scard key ——返回集合大小

sismember key member ——判斷某個值是否在集合中

sinter key1 key2...keyn ——獲取多個集合的交集元素

smembers key -列出集合中的所有元素

儲存list型別。

(1)lpush key value1 value2...:在key所關聯的list的頭部插入所有的values,如果key不存在,

則新建乙個key關聯的list,並在鍊錶頭部插入資料。插入成功,返回元素個數。

(2)rpush key value2 value2...:在該list尾部插入資料。

(3)lrange key start end:獲取鍊錶中從start到end的資料,start和end可以為負數,如果值為-1,就表示鍊錶的

尾部元素,-2表示倒數第二個元素。

(4)lpushx key value:當key存在時,在鍊錶頭部插入value的值。

(5)rpushx key value:在該list的尾部新增元素。

(6)lpop key:返回鍊錶的頭部元素。

(7)rpop key:返回鍊錶的尾部元素。

(8)llen key:返回鍊錶中元素的數量。

(9)lset key index value:設定鍊錶中index下標的元素值,0代表鍊錶的頭元素,-1代表鍊錶的尾元素。

儲存set型別

(1)sadd key values [value1、value2...]:新增資料,重複資料不新增。

(2)srem key members[member1、member2...]:刪除指定元素

(3)smembers key:獲取set中的所有成員。

(4)sismember key member:判斷member是否在set中。1表示存在,0表示不存在。

(5)sdiff key1 key2:返回2個set的差集。

(6)sinter key1 key2 key3...:返回交集

(7)sunion key1 key2 key4...:返回並集

redis各類資料型別的使用場景。

(1)string:複雜計數功能的快取

(2)hash:value存放結構化的物件,比較方便操作某個字段。做單點登陸時,可以用這種資料結構儲存使用者資訊。

以cookieid作為iekey。

(3)list:訊息佇列功能,基於redis的分頁功能

(4)set:全域性去重功能

(5)sorted set:排行榜應用,取topn操作。

redis命令:

將秘密設定為pass:config set requirepass quants

輸入密碼:auth password

不要在生產環境下使用keys,需要查詢key,可以使用scan或者sets命令。

返回當前資料庫中的key的數量:dbsize。

顯示配置:info

是否存在:exists 值

正式環境禁用keys的原因:

keys 的時間複雜度為:o(n), 其中n為資料庫中金鑰的數目,假設資料庫中的金鑰名稱和給定模式的長度有限。

儘管其複雜的為 o(n), 但是持續的時間卻很短,在乙個入門級別的電腦上可以做到 40ms 掃瞄 100 萬個資料。但是如果是高併發的條件下,

使用 keys 就會出現問題,因為 redis 是乙個單執行緒的資料庫,每次執行命令都會對資料庫進行加鎖,並且 keys 命令沒有分頁功能,

每次都會遍歷整個資料庫,假如 20ms 執行完一次操作,如果是百萬級併發,那麼 redis 每次執行命令都會出現短暫的鎖住,

進而導致大量的請求被堵塞,導致其他業務不可用,進而造成 cpu 使用率高,最後造成伺服器宕機。

keys 存在的問題:沒有分頁功能,一次會遍歷所有的資料庫,並查詢出所有符合條件的 key 值;但是查詢的結果有用的有可能很少那就很耗資源。

儘管查詢速度很快,但隨著資料量的增長,查詢的時間也會變得越長。

redis 相關知識

mysql關係型資料庫資料儲存的問題 1,效能瓶頸 磁碟io效能低下 2,擴充套件瓶頸 資料關係複雜,擴充套件性差,不利於搭建集群維護 3,資料增多會讓查詢速度變慢 所以為了減少磁碟io次數,和資料之間的關係,就有了乙個新的概念 nosql nosql not only sql 非關係型資料庫 基於...

Redis相關知識(二)

redis 事務的本質是通過multi exec watch等一組命令的集合。事務支援一次執行多個命令,乙個事務中所有命令都會被序列化。在事務執行過程,會按照順序序列化執行佇列中的命令,其他客戶端提交的命令請求不會插入到事務執行命令序列中。事務開始 multi 命令入隊 事務執行 exec 原子性是...

redis的相關知識

pom.xml 加入 org.springframework.datagroupid spring data redisartifactid 1.6.0.releaseversion dependency redis.clientsgroupid jedisartifactid 2.7.3versi...