三、下載和安裝(debian)
下載: $ sudo apt-get install redis-server
配置:redis的配置文件是 redis.conf ,文件中包含了全部可能用到的參數和詳細的解釋
啓動: $ redis-server
鏈接: $ redis-cli
2、支持的數據結構
Redis是一種key-value存儲系統,而且Redis的key是二進制安全的,可使用任何的二進制序列做爲key,普通字符串甚至JPEG文件。redis支持多種類型的數據結構:strings、lists、sets、sorted sets、hashes、bitmaps、hyperloglogs。
一、strings - 字符串
strings類型的value和key同樣,能夠是任何類型的字符串。
1 示例:
2 > SET name aut #設置 name 的值爲 aut
3 > GET name #獲取 name 的值
4 > SET age 20 #設值
5 > INCR age # num 自增 1
6 > MSET name aut age 20 #同時對多個key設值
用途舉例:計數器,存儲圖片等二進制文件
二、lists - 列表
一個key-value列表,支持兩端的添加和刪除、範圍內取值等操做
1 示例:
2 > RPUSH study redis #右端插入
3 > LPOP study #左端刪除
4 > LRANGE study 1 5 #取出範圍內的值,下標從0開始,-n表示倒數第n個位置
5 > LTRIM study 1 2 #從左邊截取指定長度
用途舉例:進程間通訊的消息隊列,博客引擎中存儲評論
三、hashes - 散列表
hashes中的一個key能夠對應一個包含多個「字段 - 值」對的結構,其包含的「字段 - 值」對數只受內存限制
1 示例:
2 > HMSET user:2547 name aut school xupt age 20 #設置字段的值
3 > HGET user:2547 name #獲取單個字段的值
4 > HMGET user:2547 name school #獲取多個字段的值
5 > HGETALL user:2547 #獲取全部字段的值
6 > HINCRBY user:2547 age 10 #將指定字段遞增某個數值
用途舉例:存儲用戶信息、物品信息
四、sets - (無序)集合
sets用於存儲無序而且無重複的數據,提供了集合內的插入刪除,集合間的交併等操做
1 示例:
2 > SADD score 98 95 64 #插入元素
3 > SMEMBERS score #獲取全部元素
4 > SISMEMBER score 80 #測試某個元素是否在集合中
5 > SINTER score1 score2 #獲取兩個集合的交集
6 > SRANDMEMBER score #隨機獲取集合中的一個元素
用途舉例:存儲具備某種共同屬性的全部對象
五、sorted sets - (有序)集合
sorted sets使用一個浮點數score來對集合內的元素進行排序,當score相同時按字母序進行排序
1 示例:
2 > ZADD user 2547 aut #插入元素,若是元素已經存在,則更新score
3 > ZRANGE user 0 -1 #獲取指定範圍內的元素
4 > ZRANK user aut #獲取指定元素的排名
5 > ZRANGEBYSCORE user -inf 2000 withscores #獲取score大於等於2000的元素,並把score一併打印出來
用途舉例:存儲排名信息
六、bitmaps - 位圖
bitmaps以位爲單位來實現某些標記功能,提供了設值/取值、統計等操做
1 示例:
2 > SETBIT key 10 1 #設置指定位爲1
3 > GETBIT key 10 #獲取指定位的值
4 > BITCOUNT key #統計指定元素的位爲1的位數
用途舉例:標記用戶ID(是否已註冊、在線仍是離線)
七、hyperloglogs - (不知道該怎麼翻譯~~)
1 示例:
2 > PFADD str1 "apple" "banana" "cherry" #添加元素
3 > PFCOUNT str1 #統計str1的近似基數
4 > PFMERGE str1&2 str1 str2 #將str1和str2合併到str1&2中
用途舉例:統計訪問網站的獨立IP數量
其餘經常使用操做:
1 > EXISTS key #檢查key是否存在
2 > DEL key #刪除key
3 > TYPE key #檢測key的類型
4 > EXPIRE key 5 #設置key的有效時間爲5秒
5 > TTL key #獲取key的剩餘有效時間
3、磁盤持久化
因爲 Redis 是一個內存中的數據結構存儲系統,全部數據都在內存中操做,當須要把數據永久保存下來的時候,就須要使用 Redis 持久化功能。持久化就是把數據從內存寫入到磁盤,也被稱爲「落地」,Redis 提供瞭如下幾種持久化方式:
- RDB:在指定的時間間隔內對數據進行快照存儲;
- AOF:在每次對記錄的寫操做以後都將操做命令寫入日誌文件;
- 不使用持久化:記錄只在服務器運行時存在於內存;
一、RDB
RDB持久化在指定的時間間隔內(或者知足某個指定條件時)將數據保存到一個名爲dump.rdb的二進制文件中。
工做方式:
①Redis fork 一個子進程;
②子進程將數據集寫入一個臨時RDB文件中;
③Redis 用新的RDB文件替換原來的RDB文件,並刪除舊文件。
優勢:
- RDB文件緊湊且單一,能夠方便地傳送到其餘備份中心,適用於災難恢復;
- 持久化工做由子進程完成,保證最大化Redis的性能;
- 當恢復比較大的數據集的時候,因爲RDB是直接恢復,速度會更快一些(較AOF);
缺點:
- 若是持久化間隔較大的話,容易丟失過多數據;
- 而若是持久化太頻繁,則不斷的fork會嚴重下降Redis的性能;
使用建議:天天保存過去一段時間的數據,每小時保存過去24個小時的數據,再搭配AOF一塊兒使用。
二、AOF
AOF在每次執行完改變數據集的命令後(具體有不一樣的策略),都將該命令追加到AOF文件的末尾,也就是保存操做的命令,恢復時經過從新執行保存的命令來恢復文件。
工做方式:
①Redis fork一個子進程,子進程建立新的AOF文件;
②子進程將原來的AOF文件內容寫入新文件中;
③Redis將執行過的修改命令寫入新文件中;
④Redis刪除舊文件。
優勢:
- 多種不一樣的fsync策略使得丟失的數據量降到最小;
- AOF文件僅僅是追加命令,因此節省空間,而且容易被人讀懂,方便恢復;
- Redis能夠在AOF文件體積變得過大時,自動在後臺對AOF進行重寫,重寫後的AOF文件僅僅包含了恢復當前數據集的最小命令集合;
缺點:
- 因爲保存的是命令,因此AOF文件比RDB文件要大;
- 根據使用的fsync策略,AOF的速度可能會慢於RDB;
使用建議:使用每秒fsync的策略。
關於持久化的建議:
- 若是數據只有在服務器運行時存在,那麼不用選擇持久化;
- 若是能夠承受數分鐘內數據丟失,那麼能夠只使用RDB持久化;
- 若是要求數據實時更新,那麼可使用每秒fsync策略的AOF持久化;
- 具體能夠根據應用場景將兩種持久化方式配合使用。
①Redis的最佳使用場景是所有數據in-memory;
②Redis的更多場景是做爲Memcached的替代者來使用;
③當須要更多的數據類型支持時,Redis更合適;
④當存儲的數據不能被剔除時,使用Redis更合適。
(全文完)