redis的簡單介紹(一)

redis的簡單介紹


redis支持的常用數據結構

  • 字符串(String)
127.0.0.1:6379> SET name "toegg"
OK
127.0.0.1:6379> GET name
"toegg"
  • 散列(Hash)
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 sex 1
(integer) 1
127.0.0.1:6379> HKEYS user  #獲取所有key
1) "name"
2) "age"
3) "sex"
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) "sex"
6) "1"
127.0.0.1:6379> HGET user name
"toegg1"
  • 列表(List)
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"
  • 集合(Set)
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"
  • 有序集合(Sorted Set | ZSet)
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爲什麼這麼快

  1. 完全基於內存,通過 key => val 鍵值對的形式來存儲數據的nosql數據庫,類似一個大hashMap,查找和操作複雜度爲O(1)
  2. 單線程,避免了上下文的切換,多進程或者多線程切換導致的cpu消耗,不用考慮各種鎖問題
  3. 使用IO多路複用epoll(採用事件驅動,讀,寫事件處理器)同時監聽多個socket上的事件,根據事件到對應處理器處理,複雜度O(1)。不是poll和select(採用無差別輪詢),複雜度 O(n)

redis和memcache的比較

  1. redis支持更復雜的數據結構,支持豐富的數據操作,需要緩存能夠支持更復雜的結構和操作,redis是不錯選擇
  2. redis3.0後支持cluster集羣模式,高可用,避免全盤奔潰,而memcache則不支持集羣模式
  3. 性能對比:由於 Redis 只使用單核,而 Memcached 可以使用多核,所以平均每一個核上 Redis 在存儲小數據時比 Memcached 性能更高。而在 100k 以上的數據中,Memcached 性能要高於 Redis

可使用Lazy懶加載redis**

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

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

Read: 讀緩存 -> 沒有就去讀db ->再寫緩存
Update: 更新數據 ->更新db -> 刪除緩存

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章