redis的簡單介紹 一

2021-10-23 08:14:31 字數 3203 閱讀 1000

redis支援的常用資料結構

127.0.0.1:6379> set name "toegg"

ok127.0.0.1:6379> get name

"toegg"

127.0.0.1:6379> hset user name "toegg1"

(integer) 1

127.0.0.1:6379> hset user age 18

(integer) 1

127.0.0.1:6379> hset user *** 1

(integer) 1

127.0.0.1:6379> hkeys user #獲取所有key

1) "name"

2) "age"

3) "***"

127.0.0.1:6379> hvals user #獲取所有val

1) "toegg1"

2) "18"

3) "1"

127.0.0.1:6379> hgetall user #獲取所有 key=>val

1) "name"

2) "toegg1"

3) "age"

4) "18"

5) "***"

6) "1"

127.0.0.1:6379> hget user name

"toegg1"

127.0.0.1:6379> lpush list 1

(integer) 1

127.0.0.1:6379> lpush list 2

(integer) 2

127.0.0.1:6379> lpush list 3

(integer) 3

127.0.0.1:6379> lrange list 0 -1 #獲取列表所有元素

1) "3"

2) "2"

3) "1"

127.0.0.1:6379> lpop list

"3"127.0.0.1:6379> lrange list 0 -1

1) "2"

2) "1"

127.0.0.1:6379> sadd set 1

(integer) 1

127.0.0.1:6379> sadd set 2

(integer) 1

127.0.0.1:6379> smembers set #獲取集合所有元素

1) "1"

2) "2"

127.0.0.1:6379> sadd set1 1

(integer) 1

127.0.0.1:6379> sadd set1 3

(integer) 1

127.0.0.1:6379> sadd set1 4

(integer) 1

127.0.0.1:6379> sinter set set1 #取兩個集合的交集

1) "1"

127.0.0.1:6379> sunion set set1 #取兩個集合的並集

1) "1"

2) "2"

3) "3"

4) "4"

127.0.0.1:6379> sdiff set set1 #取兩個集合的差集

1) "2"

127.0.0.1:6379> zadd sets 1 key1

(integer) 1

127.0.0.1:6379> zadd sets 2 key2

(integer) 1

127.0.0.1:6379> zadd sets 3 key3

(integer) 1

127.0.0.1:6379> zrange sets 0 -1 #獲取所有元素

1) "key1"

2) "key2"

3) "key3"

127.0.0.1:6379> zrangebyscore sets 2 3 withscores #返回score為2-3的元素,withscore保留score

1) "key2"

2) "2"

3) "key3"

4) "3"

127.0.0.1:6379> zrangebyscore sets 2 3 #返回score為2-3的元素

1) "key2"

2) "key3"

redis為什麼這麼快

完全基於記憶體,通過key => val鍵值對的形式來儲存資料的nosql資料庫,類似乙個大hashmap,查詢和操作複雜度為o(1)

單執行緒,避免了上下文的切換,多程序或者多執行緒切換導致的cpu消耗,不用考慮各種鎖問題

使用io多路復用epoll(採用事件驅動,讀,寫事件處理器)同時監聽多個socket上的事件,根據事件到對應處理器處理,複雜度o(1)。不是poll和select(採用無差別輪詢),複雜度 o(n)

redis和memcache的比較

redis支援更複雜的資料結構,支援豐富的資料操作,需要快取能夠支援更複雜的結構和操作,redis是不錯選擇

redis3.0後支援cluster集群模式,高可用,避免全盤奔潰,而memcache則不支援集群模式

效能對比:由於 redis 只使用單核,而 memcached 可以使用多核,所以平均每乙個核上 redis 在儲存小資料時比 memcached 效能更高。而在 100k 以上的資料中,memcached 效能要高於 redis

可使用lazy懶載入redis**

​ 快取基於記憶體的操作雖然很快,但是也不是所有東西都丟到記憶體,畢竟記憶體大小也有限,成本也很高。再者可採用需要時才載入到記憶體,不用則不載入,則是懶載入方式

​ 其中,讀和更新,大概如下流程。更新時候不是更新快取,而是直接刪除快取,就是為了懶載入。有可能頻繁在更新,頻繁在改快取,但是實際沒訪問打到該key,實際就浪費了,所以可用到才載入

read: 讀快取 -> 沒有就去讀db ->再寫快取

update: 更新資料 ->更新db -> 刪除快取

​ 當然,具體情況還得視專案和業務而定,比如一些商品定點搶購,有些設計是事先需要快取商品存貨數量到記憶體,訪問打到的時候做相應的限流攔截。需要先把資料放到快取。不是所有都採用lazy方式。

redis簡單介紹

多次查詢讓你懷疑人生 冗餘欄位過多會讓你看起來很傻 為啥不試試redis 大大減少了查詢數量,提高了效率 redis的api更加人性化,再也不需要構建sql語句,節省了sql的解析時間 redis 是完全開源免費的,遵守bsd協議,是乙個高效能的key value資料庫。redis 與其他 key ...

redis簡單介紹

特點 速度快,多種資料結構,簡單穩定,客戶端支援語言多,持久化,主從,高可用和分布式 速度快 基於鍵值對的nosql資料庫,將資料都放入記憶體中,使用c語言,單執行緒架構 資料結構 字串,雜湊,列表,集合,有序集合 鍵過期功能,實現快取,簡單穩定不依賴作業系統中的類庫,使用單執行緒 持久化 rdb和...

redis 簡單介紹

了解redis的資料結構有助於了解每種資料結構的優劣勢,方便設計合理的cache結構。1.string 可以儲存字串 浮點型 整型,如果是字串可以執行字串操作,如果是浮點型 整型也可以執行加減操作。redis會識別出它的具體型別。2.list 鍊錶,鍊錶中的每個node包含乙個字串。可以對鍊錶進行兩...