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 ->再寫快取 當然,具體情況還得視專案和業務而定,比如一些商品定點搶購,有些設計是事先需要快取商品存貨數量到記憶體,訪問打到的時候做相應的限流攔截。需要先把資料放到快取。不是所有都採用lazy方式。update: 更新資料 ->更新db -> 刪除快取
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包含乙個字串。可以對鍊錶進行兩...