這篇文章主要介紹了關於從零入手Redis緩衝,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
Redis介紹
Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。
redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value類型相對更多,包括string(字串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(雜湊類型)。這些資料類型都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支援各種不同方式的排序。與memcached一樣,為了保證效率,資料都是緩衝在記憶體中。區別的是redis會周期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現了master-slave(主從)同步。
Redis 是一個高效能的key-value資料庫。 redis的出現,很大程度補償了memcached這類key/value儲存的不足,在部分場合可以對關聯式資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等用戶端,使用很方便。 [1]
Redis支援主從同步。資料可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得Redis可執行單層樹複製。存檔可以有意無意的對資料進行寫操作。由於完全實現了發布/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的訊息發布記錄。同步對讀取操作的可擴充性和資料冗餘很有協助。
redis的官網地址,非常好記,是redis.io。(特意查了一下,網域名稱尾碼io屬於國家網域名稱,是british Indian Ocean territory,即英屬印度洋地區)
目前,Vmware在資助著redis項目的開發和維護。
2. Redis的安裝
解壓安裝檔案
解壓好了後
執行make進行編譯
編譯ok、
進入src目錄
Redis-cli 終端操作
Redis-server 啟動redis服務的檔案
Redis-benchmark壓力測試檔案
Redis-check-xx 檢車備份檔案指令碼
建立Redis運行目錄,並拷貝兩個運行檔案過去
拷貝設定檔過去
3. 啟動Redis服務
前端啟動redis服務成功的標誌
./redis-server
這時有個問題,當前啟動的是不能關的,一關就沒了,所以需要進行修改
停止服務Ctrl+z
先停止掉redis服務
使用後台來啟動redis服務
vim redis.conf
改成yes儲存,設定後台啟動redis
再次啟動
發現還是前端啟動
啟動的時候帶上設定檔一起啟動
查看下redis進程
發現redis已經啟動
4. 簡單使用
設定了三個變數,這三個變數都儲存在記憶體中
如何讀取?
Get!
5. 具體操作
1. Key的操作
在redis裡面,出了“\n”和空格 不能作為名字的組成內容外,其他內容都可以作為key的名字部分,名字長度不做要求
換句話來說,就是變數名稱
代碼 |
作用 |
Exists key |
是否存在 |
Del key1 key2 …. |
刪除指定的key |
Type key |
返回給定的key的value類型 |
Key pattern |
返回匹配指定模式的所有的key |
Rename oldkey newkey |
改名字 |
Dbsize |
返回當前資料庫的key的數量 |
Expire key seconds |
為key指定到期時間 |
Ttl key |
返回key的到期秒數 |
Select db-index |
選擇資料庫 |
Move key db-index |
將key從當前資料庫移動到指定資料庫 |
Flushdb |
刪除當前資料庫中所有的key |
Flushall |
刪除所有資料庫中的所有key |
這裡舉例了一個的使用
2. String類型的操作
String是redis最基本的類型
Redis的string可以包含任何資料,包括jpg圖片或者序列化對象
單個value值最大上限是1G位元組
代碼 |
作用 |
Set key value |
設定key對應的值為string類型的value |
Mset key1 value1…keyN valueN |
一次設定多個key的值 |
Mget key1 key2 … keyN |
一次擷取多個key的值 |
Incr key |
對key的值做++操作 |
Decr key |
同上 –操作 |
Incrby key integer |
同incr 加指定值 |
Decrby key integer |
同decr 減指定值 |
Append key value |
給指定key的字串追加value |
Substr key start end |
返回截取過的key的字串值 |
3. List鏈表類型的介紹和使用
List類型其實是一個雙向鏈表
如果想要查詢前10個最新的使用者,
要一個個查,太消耗資源
List鏈表示例圖:
通過list鏈表儲存登陸系統的最新5個使用者資訊
新使用者進來,舊的使用者踢出
鏈表該如何操作?
代碼 |
作用 |
Lpush key string |
在key對應list的頭部添加字串元素 |
Rpop key |
從list的尾部刪除元素,並返回刪除元素 |
Lien key 返回 key |
對應list的長度,key值不存在返回0,如果key對應類型不是list返回錯誤 |
Rpush key string |
同上,在尾部添加 |
Lpop key |
從list的頭部刪除元素,並返回刪除元素 |
Ltrim key start end |
截取list,保留指定區間內的元素 |
4. Set集合類型
Redis的set是string類型的無序集合。
Set元素最大可以包含(2的32次方-1)個元素
每個集合中的各個元素不能重複
代碼 |
作用 |
Sadd key member |
添加一個string元素到key對應的set集合中,返回成功1 |
Srem key member |
從key對應·set中移除給定元素,成功返回1 |
Smove p1 p2 member |
從p1對應set中移除member並添加到p2對應set中 |
Scard key |
返回set的元素個數 |
Sismember key member |
判斷member是否存在set中 |
Sinter key1 key2.。。。 |
返回所有給定key的交集 |
Sunion key1 key2 |
返回所有給定key的並集 |
Sdiff key1 key2.。 |
返回所有給定key的差集 |
Smembers key |
返回key對應set的所有元素,結果是無序的 |
裡面有一個key五個元素
接著又添加一個Linken
5. SortSet排序集合類型操作
和set一樣,sorted set 也是string元素的集合
不同的是,每個元素都會關聯一個權
通過權值可以有序的擷取集合中的元素
案例:
利用sort set實現擷取最熱門的前5文章學習
排序集合中的每個元素都是值,權的組合
代碼 |
作用 |
Zadd key score member |
添加元素到集合,元素在集合中存在則更新對應score |
Zrem key member |
刪除指定元素,1成功,0不存在 |
Zincrby key incr member |
按照incr幅度增加對應member的score值,返回score值 |
Zrank key member |
返回指定元素在集合中的排名(下標),集合中元素是安score從小到大排序的 |
Zrange key start end |
類似Irange操作從集合中指定區間的元素,返回的是有序結果 |
Zrevrange key start end |
同上,返回是逆序的 |
Zcard key |
返回集合中元素個數 |
Zscore key elemet |
返回給定元素對應的score |
Zremrangebyrank key min max |
刪除集合中排名在給點區間的元素 |
6. 快照持久化
900秒一個Key變化就(快照)儲存
300秒十個key變化就(快照)儲存
一分鐘一萬個key變化就(快照)儲存
這樣控制的好處:
資料修改的頻率非常高,備份的頻率也高,
資料修改的頻率低,備份的頻率也低。
快照持久化儲存的名字
手動發起快照持久化
如果對本機:
7. AOF持久化
本質:把使用者執行的每個“寫”指令(添加,刪除,修改)都備份到檔案中,還原的時候執行具體的“寫“指令
開啟AOF持久化會清空redis內部資料
開啟AOF持久化
設定檔被修改 重啟服務
查看redis進程:Ps –A | grep redis
-9強制殺死進程
啟動一個新的進程
Aof追加持久化的備份頻率
Always 每次收到寫指令就立刻強制寫入磁碟,很慢,但能保持完全的持久化
Everysec 每秒強制寫入磁碟一次,在效能和持久化方面做了很好的折中,推薦
No 完全依賴OS 效能最好,持久化沒保證
8. 主從模式
為了降低每個redis伺服器的負載,可以設定幾個,並作主從模式
一個伺服器負載“寫“
其他伺服器負載“讀”
主伺服器會 自動 同步給從伺服器
修改IP地址和連接埠號碼