1、redis介紹mysql
redis是一個key-value存儲系統。和Memcached相似,它支持存儲的values類型相對更多,包括字符串、列表、哈希散列表、集合,有序集合。
redis
與memcached同樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件,而且在此基礎上實現了master-slave(主從)同步。sql
本質:將數據保存在內存中數據庫
用途:redis能夠作緩存;redis能夠作消息隊列緩存
特性:安全
能夠作持久化:在配置文件設置,若是你要保存到文件,可添加設置,就算電腦不當心關機了,數據仍是在的。這個是本身來定的。支持存放數據的格式多(5種格式)bash
實現數據持久化的兩種方式:服務器
(1)使用截圖的方式,將內存中的數據不斷寫入磁盤(性能高,但可能會引發必定程度的數據丟失)app
(2)使用相似mysql的方式,記錄每次更新的日誌異步
2、redis優點
一、爲何要使用redis?使用redis有哪些好處?
(1) 速度快,由於數據存在內存中,相似於HashMap,HashMap的優點就是查找和操做的時間複雜度都是O(1)
(2) 支持豐富數據類型,支持string,list,set,sorted set,hash
(3) 支持事務,操做都是原子性,所謂的原子性就是對數據的更改要麼所有執行,要麼所有不執行
(4) 豐富的特性:可用於緩存,消息,按key設置過時時間,過時後將會自動刪除
二、redis相比memcached有哪些優點?
(1) memcached全部的值均是簡單的字符串,redis做爲其替代者,支持更爲豐富的數據類型
(2) redis的速度比memcached快不少
(3) redis能夠持久化其數據
3、redis安裝配置
cd /usr/local/src/ wget http://download.redis.io/releases/redis-3.0.6.tar.gz tar xzf redis-3.0.6.tar.gz cd redis-3.0.6 make && make install PREFIX=/usr/local/redis-3.0.6 cd utils/ cp redis_init_script /etc/init.d/redis sed -i 's%/usr/local/%/usr/local/redis/%g' /etc/init.d/redis ln -s /usr/local/redis-3.0.6/ /usr/local/redis ln -s /usr/local/redis/redis.conf /etc/redis.conf chmod +x /etc/init.d/redis sed -i '/^daemonize no/cdaemonize yes' /etc/redis.conf echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf sysctl -p echo never > /sys/kernel/mm/transparent_hugepage/enabled /etc/init.d/redis start
Redis的配置:
daemonize:如須要在後臺運行,把該項的值改成yes
pdifile:把pid文件放在/var/run/redis.pid,能夠配置到其餘地址
bind:指定redis只接收來自該IP的請求,若是不設置,那麼將處理全部請求,在生產環節中最好設置該項
port:監聽端口,默認爲6379
timeout:設置客戶端鏈接時的超時時間,單位爲秒
loglevel:等級分爲4級,debug,revbose,notice和warning。生產環境下通常開啓notice
logfile:配置log文件地址,默認使用標準輸出,即打印在命令行終端的端口上
database:設置數據庫的個數,默認使用的數據庫是0
save:設置redis進行數據庫鏡像的頻率
rdbcompression:在進行鏡像備份時,是否進行壓縮
dbfilename:鏡像備份文件的文件名
dir:數據庫鏡像備份的文件放置的路徑
slaveof:設置該數據庫爲其餘數據庫的從數據庫
masterauth:當主數據庫鏈接須要密碼驗證時,在這裏設定
requirepass:設置客戶端鏈接後進行任何其餘指定前須要使用的密碼
maxclients:限制同時鏈接的客戶端數量
maxmemory:設置redis可以使用的最大內存
appendonly:開啓appendonly模式後,redis會把每一次所接收到的寫操做都追加到appendonly.aof文件中,當redis從新啓動時,會從該文件恢復出以前的狀態
appendfsync:設置appendonly.aof文件進行同步的頻率
vm_enabled:是否開啓虛擬內存支持
vm_swap_file:設置虛擬內存的交換文件的路徑
vm_max_momery:設置開啓虛擬內存後,redis將使用的最大物理內存的大小,默認爲0
vm_page_size:設置虛擬內存頁的大小
vm_pages:設置交換文件的總的page數量
vm_max_thrrads:設置vm IO同時使用的線程數量
4、redis經常使用命令
redis-cli -h host -p port -a password AUTH password #驗證密碼是否正確 CONFIG GET port #獲取端口信息 select 6 #選擇數據庫 CONFIG GET timeout #獲取timeout超時時間 CONFIG SET timeout 5000 #設置timeout超時時間爲5000 keys * #查看全部的key,生產環境不要用 flushdb #清空redis type key #判斷key的類型 EXISTS key #檢查給定的key是否存在 dbsize # 數據庫中key的數量 monitor #redis正在作什麼 slowlog get slowlog get 10 #查看日誌 info #查看服務器信息 sort price #排序 sort price desc ## 逆序排序 set key value #設置key的值,若存在則覆蓋 get key #獲取key對應的值 EXISTS key #查看是否存在該元素 del key #刪除元素 HMSET user name "張三" age 18 #存多個哈希值 HGET user age #取哈希值 HGETALL user #獲取在哈希表中指定 user 的全部字段和值 HDEL user name #刪除user的哈希表name字段 INCR key #將 key 中儲存的數字值增一 INCRBY key increment #將 key 所儲存的值加上給定的增量值(increment) INCRBYFLOAT key increment #將 key 所儲存的值加上給定的浮點增量值(increment) DECR key #將 key 中儲存的數字值減一 DECRBY key decrement #key 所儲存的值減去給定的減量值(decrement) LPUSH key value1 [value2] #將一個或多個值插入到列表頭部 LPUSHX key value #將一個值插入到已存在的列表頭部 RPUSH key value1 [value2] #在列表中添加一個或多個值 RPUSHX key value #爲已存在的列表添加值 LLEN key #獲取列表長度 LPOP key #移出並獲取列表的第一個元素 RPOP key #移除並獲取列表最後一個元素 SADD key member1 [member2] #向集合添加一個或多個成員 SCARD key #獲取集合的成員數 SMEMBERS key #返回集合中的全部成員 SISMEMBER key member #判斷 member 元素是不是集合 key 的成員 SDIFF key1 [key2] #返回給定全部集合的差集 SINTER key1 [key2] #返回給定全部集合的交集
5、redis的持久化
redis提供兩種方式進行持久化,一種是RDB持久化(原理是將Reids在內存中的數據庫記錄定時 dump到磁盤上的RDB持久化),另一種是AOF(append only file)持久化(原理是將Reids的操做日誌以追加的方式寫入文件)
一、持久化方式說明
RDB持久化是指在指定的時間間隔內將內存中的數據集快照寫入磁盤,實際操做過程是fork一個子進程,先將數據集寫入臨時文件,寫入成功後,再替換以前的文件,用二進制壓縮存儲。
AOF持久化以日誌的形式記錄服務器所處理的每個寫、刪除操做,查詢操做不會記錄,以文本的方式記錄,能夠打開文件看到詳細的操做記錄。
二、兩種持久化方式的優點和劣勢
RDB存在哪些優點呢?
(1). 一旦採用該方式,那麼你的整個Redis數據庫將只包含一個文件,這對於文件備份而言是很是完美的。好比,你可能打算每一個小時歸檔一次最近24小時的數 據,同時還要天天歸檔一次最近30天的數據。經過這樣的備份策略,一旦系統出現災難性故障,咱們能夠很是容易的進行恢復。
(2). 對於災難恢復而言,RDB是很是不錯的選擇。由於咱們能夠很是輕鬆的將一個單獨的文件壓縮後再轉移到其它存儲介質上。
(3). 性能最大化。對於Redis的服務進程而言,在開始持久化時,它惟一須要作的只是fork出子進程,以後再由子進程完成這些持久化的工做,這樣就能夠極大的避免服務進程執行IO操做了。
(4). 相比於AOF機制,若是數據集很大,RDB的啓動效率會更高。
RDB又存在哪些劣勢呢?
(1). 若是你想保證數據的高可用性,即最大限度的避免數據丟失,那麼RDB將不是一個很好的選擇。由於系統一旦在定時持久化以前出現宕機現象,此前沒有來得及寫入磁盤的數據都將丟失。
(2). 因爲RDB是經過fork子進程來協助完成數據持久化工做的,所以,若是當數據集較大時,可能會致使整個服務器中止服務幾百毫秒,甚至是1秒鐘。
AOF的優點有哪些呢?
(1). 該機制能夠帶來更高的數據安全性,即數據持久性。Redis中提供了3中同步策略,即每秒同步、每修改同步和不一樣步。事實上,每秒同步也是異步完成的,其 效率也是很是高的,所差的是一旦系統出現宕機現象,那麼這一秒鐘以內修改的數據將會丟失。而每修改同步,咱們能夠將其視爲同步持久化,即每次發生的數據變 化都會被當即記錄到磁盤中。能夠預見,這種方式在效率上是最低的。至於無同步,無需多言,我想你們都能正確的理解它。
(2). 因爲該機制對日誌文件的寫入操做採用的是append模式,所以在寫入過程當中即便出現宕機現象,也不會破壞日誌文件中已經存在的內容。然而若是咱們本次操 做只是寫入了一半數據就出現了系統崩潰問題,不用擔憂,在Redis下一次啓動以前,咱們能夠經過redis-check-aof工具來幫助咱們解決數據 一致性的問題。
(3). 若是日誌過大,Redis能夠自動啓用rewrite機制。即Redis以append模式不斷的將修改數據寫入到老的磁盤文件中,同時Redis還會創 建一個新的文件用於記錄此期間有哪些修改命令被執行。所以在進行rewrite切換時能夠更好的保證數據安全性。
(4). AOF包含一個格式清晰、易於理解的日誌文件用於記錄全部的修改操做。事實上,咱們也能夠經過該文件完成數據的重建。
AOF的劣勢有哪些呢?
(1). 對於相同數量的數據集而言,AOF文件一般要大於RDB文件。RDB 在恢復大數據集時的速度比 AOF 的恢復速度要快。
(2). 根據同步策略的不一樣,AOF在運行效率上每每會慢於RDB。總之,每秒同步策略的效率是比較高的,同步禁用策略的效率和RDB同樣高效。
兩者選擇的標準,就是看系統是願意犧牲一些性能,換取更高的緩存一致性(aof),仍是願意寫操做頻繁的時候,不啓用備份來換取更高的性能,待手動運行save的時候,再作備份(rdb)。rdb這個就更有些 eventually consistent的意思了。
三、兩種持久化方式的配置
(1).RDB持久化配置
Redis會將數據集的快照dump到dump.rdb文件中。此外,咱們也能夠經過配置文件來修改Redis服務器dump快照的頻率,在打開配置文件以後,咱們搜索save,能夠看到下面的配置信息:
save 900 1 #在900秒(15分鐘)以後,若是至少有1個key發生變化,則dump內存快照。
save 300 10 #在300秒(5分鐘)以後,若是至少有10個key發生變化,則dump內存快照。
save 60 10000 #在60秒(1分鐘)以後,若是至少有10000個key發生變化,則dump內存快照。
(2).AOF持久化配置
在Redis的配置文件中存在三種同步方式,它們分別是:
appendfsync always #每次有數據修改發生時都會寫入AOF文件。
appendfsync everysec #每秒鐘同步一次,該策略爲AOF的缺省策略。
appendfsync no #從不一樣步。高效可是數據不會被持久化。