Redis安装及基本配置
一、Redis介紹
1、Redis是一個key-value存儲系統
2、官方站點http://redis.io
3、Redis和Memcached類似,但支持數據持久化
4、支持更多value類型,除了string外,還支持hash、lists(鏈表)、sets(集合)、和sorted sets(有序集合)幾種數據類型
5、Redis使用兩種文件格式:全量數據(RDB)和增量請求(aof)。全量數據格式是把內存中的數據寫入磁盤,便于下次讀取文件進行加載。增量請求文件則是把內存中的數據序列化為操作請求,用于讀取文件進行replay得到數據
6、Redis的存儲分為內存存儲、磁盤存儲和log文件三部分
二、Redis下載安裝配置
# wget 'https://codeload.github.com/antirez/redis/tar.gz/2.8.21' -O redis-2.8.21.tar.gz
# tar zxvf redis-2.8.21.tar.gz
# cd redis-2.8.21
# make
# make PREFIX=/usr/local/redis install
# mkdir? /usr/local/redis/etc
# wget http://www.apelearn.com/study_v2/.redis_conf -O /usr/local/redis/etc/redis.conf 2> /dev/null
# wget http://www.apelearn.com/study_v2/.redis_init -O /etc/init.d/redis 2> /dev/null
# useradd -s /sbin/nologin redis && mkdir /usr/local/redis/var && chmod 777 /usr/local/redis/var && chmod 755 /etc/init.d/redis
# chkconfig --add redis
# chkconfig redis on
vm.overcommit_memory = 1
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# service redis start
三、Redis數據結構
1、Redis數據類型-string
l?????? string是最簡單的類型,你可以理解成與Memcached一樣的類型,一個key對應一個value,其上支持的操作與Memcached的操作類似,他的功能更豐富。設置可以存二進制的對象。
l?????? 示例
? ?# redis-cli set mykey "fanjinbao"
?? # redis-cli get mykey "fanjinbao"
?? "fanjinbao"
?? 也可以進入redis的終端進行創建
?? # redis-cli
? ?127.0.0.1:6379> mset key1 zhangsan key2 lisi key3 hello
?? 127.0.0.1:6379> mget key1 key2 key3
?? 1) "zhangsan"
?? 2) "lisi"
?? 3) "hello"
2、Redis數據類型-list
l?????? list是一個鏈表結構,主要功能是push、pop、獲取一個范圍的所有值等等。操作中key理解為鏈表的名字,使用List結構,我們可以輕松地實現最新消息排行等功能(比如新浪微博的TimeLine)。list的另一個應用就是消息隊列,可以利用list的push操作,將任務存在list中,然后工作線程再用pop操作將任務取出進行執行。
l?????? 示例
?? 左側插入
?? # redis-cli lpush list aaa
?? 左側取值
?? # redis-cli lpop list
?? 右側插入
?? # redis-cli rpush list lisi
?? 右側取值
?? # redis-cli rpop list
?? 查看所有list值
?? # redis-cli lrange list 0 -1
3、Redis數據類型-set
l?????? set是集合,和我們數學中的集合概念相似,對集合的操作有添加刪除元素,有對多個集合求交并差等操作。操作中key理解為集合的名字。比如在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合。因為Redis非常人性化的為集合提供了求交集、并集、差集等操作,那么就可以非常方便的實現如共同關注、共同喜好、二度好友等功能,對上面所有集合的操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存到一個新的集合中。QQ有一個社交功能叫“好友標簽”,可以個你的好友貼標簽,比如“大美女”、“土豪”,“歐巴”等等,這時可以使用redis的集合來實現,把每一個用戶的標簽都存儲在一個集合之中。
l?????? 示例
?? 往集合中添加元素
?? # redis-cli sadd set1 abc
?? 列出集合中的元素(無序顯示)
?? # redis-cli smembers set1
4、Redis數據類型-sort set
l?????? sort set是有序集合,它比set多了一個權重參數score,使得集合中的元素能夠按score進行有序排列,比如一個存儲全班同學成績的sort set,其集合value可以是同學的學號,而score就可以是其考試得分,這樣的數據插入集合的時候,就已經進行了天然的排序
l?????? 示例
往集合中添加元素
# redis-cli zadd set2 12 abc
# redis-cli zadd set2 2 "cde 123"
# redis-cli zadd set2 24 123-aaa
# redis-cli zadd set2 4 a123a
列出集合中的元素(按權重參數排列升序)
# redis-cli zrange set2 0 -1
1) "cde 123"
2) "a123a"
3) "abc"
4) "123-aaa"
列出集合中的元素(按權重參數降序)
# redis-cli zrevrange set2 0 -1
5、Redis數據類型-hash
l?????? 在Memcached中,我們經常將一些結構化的信息打包成hashmap,在客戶端序列化后存儲為一個字符串的值(一般是JSON格式),比如用戶名的昵稱、年齡、性別、積分等。
l?????? 示例
?? 往集合中添加元素
?? # redis-cli hset hash name fanjinbao
?? # redis-cli hset hash age 31
?? 取集合中的元素
?? # redis-cli hget hash name
?? # redis-cli hget hash age
?? 列出所有元素
?? # redis-cli hgetall hash
四、Redis持久化
1、Redis提供了兩種持久化的方式,分別是RDB(Redis DataB)和AOF(Append Only File)
2、RDB,簡而言之,就是不同的時間點,將redis存儲的數據生成快照并存儲到磁盤等介質上。
3、AOF,則是換了一個角度來實現持久化,那就是將redis執行過得所有寫指令記錄下來,在下次redis重新啟動時,只要把這些指令從前到后再重復執行一遍,就可以實現數據恢復。
4、其實RDB和AOF兩種方式也可以同時使用,在這種情況下,如果redis重啟的話,則會優先采用AOF方式來進行數據恢復,這是因為AOF方式的數據恢復完整度更高。
5、如果你沒有數據持久化的需求,也完全可以關閉RDB和AOF方式,這樣的話,redis就變成一個純內存數據庫,就像Memcached一樣
五、Redis配置
查看Redis配置信息
127.0.0.1:6379> config get *
Redis的基本配置參數:
daemonize no #默認情況下,redis并不是以daemon形式來運行的。通過daemonize配置項可以控制redis的運行形式
pidfile /path/to/redis.pid #當以daemon形式運行時,redis會生成一個pid文件,默認會生成在/var/run/redis.pid
bind 192.168.1.201 192.168.1.202 #指定綁定的ip,可以有多個
port 6379 #默認端口
unixsocket /tmp/redis.sock #也可以監聽socket
unixsocketperm 755 #當監聽soket時可以指定權限為755
timeout 0 #當一個redis-client一直沒有請求發現server端,那么server端有權主動關閉這個連接,可以通過timeout來設置“空閑超時時限”,0表示永不關閉
tcp-keepalive 0 #TCP連接保活策略,可以通過tcp-keepalive配置項來進行設置,單位為秒,加入設置60秒想連接空閑的客戶端發起一次ACK請求,以檢查客戶端是否已經掛掉,對于無響應的客戶端則會關閉其連接,如果設置為0,則不會進行保活檢測。
loglevel notice #日志級別,有四種debug、verbose、nbotice、warning
logfile “” #定義日志路徑
syslog-ident redis #如果希望日志打印到syslog中,通過syslog-enable來控制,另外,syslog-ident還可以讓你指定syslog里的日志標志。
syslog-facility local0 #指定syslog的設備,可以是USER或者local0-local7
databases 16 #設置數據庫的總數量,select n選擇數據庫,0-15
Redis快照配置(rdb持久化)
save 900 1 #表示表示每15分鐘且至少1個key改變,就觸發一次持久化
save 60 10000 #表示每60秒至少有10000個key改變,就觸發一次持久化
save 300 10 #表示每5分鐘且至少10個key改變,就觸發
save "" #這樣就可以禁用rdb持久化
stop-writes-on-bgsave-error yes #rdb持久化寫入磁盤避免不了會出現失敗的情況,默認一旦出現失敗,redis會馬上停止寫操作,如果你覺得無所謂,那就可以使用該選項關閉這個功能。
rdbcompression yes #是否要壓縮
rdbchecksum yes #是否進行數據校驗
dbfilename dump.rdb #定義快照文件的名字
dir ./ #定義快照文件存儲路徑
Redis安全相關配置
requirepass fansik #設置redis-server的密碼
如果設置了密碼,登錄方式:
# redis-cli -a fansik
rename-command CONFIG fansik.config #將CONFIG命令更名為fansik.conf,這樣就可以避免誤操作,但如果使用了AOF持久化,建議不要啟用該功能
rename-command CONFIG "" #也可以后面定義為空,這樣就可以禁掉CONFIG命令
Redis限制相關配置
maxclients 10000 #限制最大客戶端連接數
maxmemory <bytes> #設定最大內存使用數,單位是byte
maxmemmory-policy volatile-lru #指定內存移除規則
maxmemory-samples 3 #LRU算法和最小TTL算法都并非是精確的算法,而是估值,所以可以設置樣本的大小,加入redis默認會檢查三個key并選擇其中的LRU的那個,那么你可以改變這個key樣本的數量
Redis AOF持久化相關配置
appendonly on #如果是yes,則開啟aof持久化
appendfilename "appendonly.aof" #指定aof文件名字,保存在dir參數指定的目錄
appendfsync everysec #指定fsync()調用模式,有三種no(不調用fsync),always(每次寫都會調用fsync),everysec(每秒鐘調用一次fsync),第一種最快,第二種數據最安全,但性能會差一些,默認為第三種
no-appendfsync-on-rewrite no #使用no可避免當寫入量非常大時的磁盤io阻塞
auto-aof-rewrite-percentage 10 #規定什么情況下會出發aof重寫。改值為一個比例,10表示當aof文件增幅達到10%時則會觸發重寫機制
auto-aof-rewrite-min-size 64mb #重寫會有一個條件,就是不能低于64mb
Redis慢日志相關配置
針對慢日志,你可以設置兩個參數,一個是執行時長,單位是微秒,另一個是慢日志的長度。當一個新的命令被寫入日志時,最老的一條會從命令隊列中被移除
slowlog-log-slower-than 10000 #慢于10000ms則記錄日志
slowlog-max-len 128 #日志長度(條數)
?
轉載于:https://www.cnblogs.com/fansik/p/5483057.html
總結
以上是生活随笔為你收集整理的Redis安装及基本配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu国内源
- 下一篇: 【T_SQL】 基础 事务