1、Redis簡介
Redis是當前比較熱門的NOSQL系統之一,它是一個開源的使用ANSI c語言編寫的key-value存儲系統(區別於MySQL的二維表格的形式存儲。)。和Memcache類似,但很大程度補償了Memcache的不足。和Memcache一樣,Redis數據都是緩存在計算機內存中,不同的是,Memcache只能將數據緩存到內存中,無法自動定期寫入硬盤,這就表示,一斷電或重啟,內存清空,數據丟失。所以Memcache的應用場景適用於緩存無需持久化的數據。而Redis不同的是它會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,實現數據的持久化
1.1、Redis的特點
- Redis讀取的速度是110000次/s,寫的速度是81000次/s
- 原子 。Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全並后的原子性執行。
- 支持多種數據結構:string(字符串);list(列表);hash(哈希),set(集合);zset(有序集合)
- 持久化,主從復制(集群)
- 支持過期時間,支持事務,消息訂閱。
- 官方不支持window,但是又第三方版本。
Redis與memcache的區別:
1、Redis和Memcache都是將數據存放在內存中,都是內存數據庫。不過memcache還可用於緩存其他東西,例如圖片、視頻等等。 2、Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲。 3、虛擬內存--Redis當物理內存用完時,可以將一些很久沒用到的value 交換到磁盤 4、過期策略--memcache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通過例如expire 設定,例如expire name 10 5、分布式--設定memcache集群,利用magent做一主多從;redis可以做一主多從。都可以一主一從 6、存儲數據安全--memcache掛掉后,數據沒了;redis可以定期保存到磁盤(持久化) 7、災難恢復--memcache掛掉后,數據不可恢復; redis數據丟失后可以通過aof恢復 8、Redis支持數據的備份,即master-slave模式的數據備份。
2、Redis的應用場景
2.1、數據緩存(提高訪問性能)
將一些數據在短時間之內不會發生變化,而且它們還要被頻繁訪問,為了提高用戶的請求速度和降低網站的負載,降低數據庫的讀寫次數,就把這些數據放到緩存中。
緩存的兩種形式:
頁面緩存經常用在CMS(content manage system)內存管理系統里面。
數據緩存經常會用在頁面的具體數據里面。
頁面緩存:第一次從數據庫中讀取,然后生成一個靜態頁面,以后所有的讀取,只加載這個靜態頁面就可以了。
數據緩存:由於一個頁面有幾種需要從不同的緩存中讀取數據的模塊,所以不適合使用頁面緩存。
redis 僅用做緩存的配置
將redis當做緩存使用LRU算法的緩存來使用;LRU是Redis唯一支持的回收方法。 如果你想把Redis當做一個緩存來用,所有的key都有過期時間,那么你可以考慮 使用以下設置(假設最大內存使用量為2M): maxmemory 2mb #maxmemory配置指令用於配置Redis存儲數據時指定限制的內存大小。 maxmemory-policy allkeys-lru #設置maxmemory為0代表沒有內存限制。 以上設置並不需要我們的應用使用EXPIRE(或相似的命令)命令去設置每個key的過期時間,因為 只要內存使用量到達2M,Redis就會使用類LRU算法自動刪除某些key。 相比使用額外內存空間存儲多個鍵的過期時間,使用緩存設置是一種更加有效利用內存的方式。而且相比每個鍵固定的 過期時間,使用LRU也是一種更加推薦的方式,因為這樣能使應用的熱數據(更頻繁使用的鍵) 在內存中停留時間更久。 基本上這么配置下的Redis可以當成memcached使用。 當我們把Redis當成緩存來使用的時候,如果應用程序同時也需要把Redis當成存儲系統來使用,那么強烈建議 使用兩個Redis實例。一個是緩存,使用上述方法進行配置,另一個是存儲,根據應用的持久化需求進行配置,並且 只存儲那些不需要被緩存的數據。
2.2、會話緩存
(session cache,保存web會話信息)
2.3、排行榜/計數器
(NGINX+lua+redis計數器進行IP自動封禁)
2.4、消息隊列
(構建實時消息系統,聊天,群聊)
