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