Redis也是key-value存儲系統(tǒng),官方站點 http://redis.io,但相對于memcache,有如下優(yōu)勢:
創(chuàng)新互聯(lián)致力于做網(wǎng)站、成都做網(wǎng)站,成都網(wǎng)站設(shè)計,集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場競爭中脫穎而出。 選擇創(chuàng)新互聯(lián),就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!1、支持更多地value類型(string、hash、lists、sets、sorted sets等);
2、支持?jǐn)?shù)據(jù)持久化,預(yù)防服務(wù)重啟后需要重新存儲;
redis 有兩種文件格式:全量數(shù)據(jù)(RDB=redis database)、增量請求(aof=append only file)。
前者是將內(nèi)存中的數(shù)據(jù)寫進(jìn)磁盤,便于下次讀取文件時直接進(jìn)行加載,快照形式;
后者是將redis執(zhí)行的指令記錄下來,重啟時再執(zhí)行一遍,類似于binlog存儲;
兩種方式可以同時用,此時重啟,會優(yōu)先采用AOF進(jìn)行恢復(fù);
兩種方式都不用,redis就變成了內(nèi)存數(shù)據(jù)庫,像memcache;
redis 的存儲:內(nèi)存存儲、磁盤存儲、log文件三部分
安 裝
首先wget下載源碼包,https://code.google.com/archive/p/redis/downloads
舉例:wget https://codeload.github.com/antirez/redis/tar.gz/2.8.21
解壓:tar zxvf 2.8.21 && cd redis-2.8.21
yum install -y gcc epel-release; yum install -y jemalloc-devel //make 之前安裝些工具
編譯:make //因為makefile已經(jīng)寫好,不需要再編譯,直接make就好
error:如果make出現(xiàn)錯誤,提示找不到一些東西 #我用的centos7,倒是沒出現(xiàn)錯誤
解決:cd deps && make hiredis lua jemalloc linenoise && cd ../ && make
安裝:make PREFIX=/usr/local/redis install //為方便管理,指定了下目錄
創(chuàng)建:mkdir /usr/local/redis/etc && /usr/local/redis/var
wget http://www.apelearn.com/study_v2/.redis_init -O /etc/init.d/redis //老師的啟動腳本
用戶:useradd -s /sbin/nologin redis
權(quán)限:chmod 777 /usr/local/redis/var && chmod 755 /etc/init.d/redis
自啟:chkconfig --add redis && chkconfig redis on && service redis start
數(shù)據(jù)類型
string:可以理解為memcache一樣類型,一個key對應(yīng)一個value,功能比mem豐富,最簡單類型;
set:集合,常見于取交并差集,比如微博中的共同關(guān)注人、共同粉絲,qq的好友標(biāo)簽等功能;
lists:鏈表結(jié)構(gòu),功能push、pop、獲取范圍等,輕松實現(xiàn)排行等功能;
hash:哈希,mem中將結(jié)構(gòu)化信息打包成hashmap,序列化后存儲在一個字符中,比如年齡性別等;
sorted set:有序集合,比set多了權(quán)重參數(shù)score,使其能按score進(jìn)行排列,插入時也有順序;
配 置 文 件
###通用配置 daemonize no #默認(rèn)情況下,redis并不是以daemon形式來運行的。 pidfile /path/to/redis.pid #當(dāng)以daemon形式運行時,指向生成的pid文件 bind 192.168.1.2 10.8.4.2 #指定綁定的ip,可以有多個,空格分隔 port 6379 #指定監(jiān)聽端口 unixsocket /tmp/redis.sock #也可以監(jiān)聽socket unixsocketperm 755 #當(dāng)監(jiān)聽socket時可以指定權(quán)限為755 timeout 0 #客戶端時間內(nèi)沒向服務(wù)端發(fā)請求,服務(wù)端通過此值關(guān)閉連接,0表示永不關(guān)閉 tcp-keepalive 0 #TCP連接保活策略,檢測客戶端對否掛掉,0表示不開啟 loglevel notice #日志級別,有四種debug, verbose, notice, warning logfile “” #定義日志路徑,“”表示默認(rèn) syslog-ident redis #通過syslog-enabled來控制打印到syslog,此值指定syslog里的日志標(biāo)志 syslog-facility local0 #指定syslog的設(shè)備,可以是USER或者local0-local7 databases 16 #設(shè)置數(shù)據(jù)庫的總數(shù)量 ###快照配置 save 900 1 #表示每15分鐘且至少有1個key改變,就觸發(fā)一次持久化 save 300 10 #表示每5分鐘且至少有10個key改變,就觸發(fā)一次持久化 save 60 10000 #表示每60秒至少有10000個key改變,就觸發(fā)一次持久 save “” #這樣可以禁用rdb持久化 stop-writes-on-bgsave-error yes #寫入磁盤失敗后,馬上停止寫操作 rdbcompression yes #是否要壓縮 rdbchecksum yes #是否進(jìn)行數(shù)據(jù)校驗 dbfilename dump.rdb #定義快照文件的名字 dir /usr/local/redis #定義快照文件儲存路勁 ###安全相關(guān)配置 requirepass teng #設(shè)置redis-server的密碼 ##測試:redis-cli && get key1 重啟后:redis-cli -a teng && get key1 會不一樣輸出 rename-command CONFIG teng.config ##將CONFIG命令更名為teng.config,避免誤操作,但如果使用了AOF持久化,建議不要啟用該功能 rename-command CONFIG “” #也可以后面定義為空,這樣就禁掉了該CONFIG命令 ###限制相關(guān)配置 maxclients 10000 #限制大客戶端連接數(shù) maxmemory主 從 同 步
主 master | 192.168.1.1 |
從 slave | 192.168.1.2 |
按上述方式安裝redis并啟動,master配置文件不動,slave配置文件加下行:
slaveof 192.168.1.1 6379 //主的ip和端口
masterauth passwd //如果主上設(shè)置了密碼,要加這一行
重啟測試:
master >> redis-cli set key0 1 && redis-cli get key0 == 輸出1
slave >> redis-cli get key0 == 輸出1
slave-read-only yes # 讓從只讀 repl-ping-slave-period 10 # 設(shè)置slave向master發(fā)起ping的頻率,每10s發(fā)起一次 repl-timeout 60 # 設(shè)置slave ping不通master多少s后就超時 repl-disable-tcp-nodelay no # 開啟后將會使用更少的帶寬,但會有延遲,建議關(guān)閉 repl-backlog-size 1mb # 主從斷開后,主先把數(shù)據(jù)寫到緩沖區(qū)backuplog,再次連接從中讀取數(shù)據(jù) repl-backlog-ttl 3600 # 主從斷開后,緩沖區(qū)的有效期,默認(rèn)1小時 slave-priority 100 # 多個slave設(shè)置優(yōu)先級,數(shù)值越小優(yōu)先級越高,應(yīng)用于集群中, min-slaves-to-write 3 # 和下面的一起使用,主發(fā)現(xiàn)有超過3個slave的延遲高于10s, min-slaves-max-lag 10 #那么主就會暫停寫操作。這兩個數(shù)值任何一個為0,則關(guān)閉該功能常 用 命 令
string:
set key1 teng // set賦值
set key1 teng // 一個key對應(yīng)一個value,多次賦值,會覆蓋前面的value
get key1 // get取值
setnx key2 aaa // 返回1,get key2查看
setnx key2 bbb // 返回0,如果存在key,返回0,不會創(chuàng)建
setex key3 10 1 // 這個是用來給key設(shè)定過期時間的 查看時間ttl key3
mset key1 1 key2 2 c 3 // 同時設(shè)置多個key
mget key1 key2 c
Hash:
hset user1 name teng //建立hash,可以存儲用戶名字性別年齡等多個信息
hset user1 age 24
hset user1 job it
hgetall user1 //獲取所有值
hmset user2 name teng age 24 job it //批量建立鍵值對
hmget user2 //獲取所有值
hmget user2 name age //獲取指定值
hdel user2 job //刪除指定filed
hkeys user2 //打印所有的key
hvals user2 //打印所有的values
hlen user2 //查看hash有幾個filed(鍵),返回數(shù)字
lists:
lpush lista a //從左側(cè)壓入一個元素
lpush lista b
rpush lista 1 //從右側(cè)壓入一個元素
rpush lista 2
lpop lista //從左側(cè)取出,默認(rèn)左第一個,取出之后此值就不存在了
rpop lista //從右側(cè)取第一個元素
lrange lista 0 -1 //0 為頭 左側(cè)第一個,-1為尾 右側(cè)第一個,沒有rrange
linsert lista before 2 3 //在元素的值2的前面插入一個元素為3
lset lista 4 bbb //把第5個元素修改為bbb
lindex lista 0 //查看第1個元素,,數(shù)字為索引
lindex lista 3 //查看第4個元素
llen lista //查看鏈表中有幾個元素
set:
sadd seta aaa //向集合seta中放入元素
smembers seta //查看集合中的所有元素
srem seta aaa //刪除元素
spop seta //隨機取出一個元素,刪除
sdiff seta setb //求差集,以seta為標(biāo)準(zhǔn)
sinter seta setb //求交集
sunion seta setb //求并集
sdiffstore setc seta setb //求差集,并存儲到了setc,查看 SMEMBMERS setc
sinterstore setd seta setb //求交集,并存儲setd ,查看 SMEMBMERS setd
sunionstore sete seta setb //求并集,并存儲到sete
sismember seta aaa //判斷一個元素是否屬于一個集合
srandmember seta //隨機取出一個元素,但不刪除
zset:
zadd zseta 11 123 //創(chuàng)建有序集合,大寫ZADD 等命令的可以tab補全
zrange zseta 0 -1 //顯示所有元素,按順序顯示
zrange zseta 0 -1 withscores //可以帶上分值
zrangebyscore zseta 1 10 // 返回分值范圍1-10的元素
zrank zseta 222 //返回元素的索引值,索引值從0開始,按score正向排序
zrevrank zseta 222 //同上,不同的是,按score反序排序
zrevrange zseta 0 -1 //反序顯示所有元素,并帶分值
zcard zseta //返回集合中所有元素的個數(shù)
zcount zseta 1 10 // 返回分值范圍1-10的元素個數(shù)
zrem zseta 222 //刪除指定元素
zremrangebyrank zseta 0 2 //刪除索引范圍0-2的元素,按score正向排序
zremrangebyscore zseta 1 10 //刪除分值范圍1-10的元素
鍵值相關(guān):
keys * //取出所有key
keys m* //模糊匹配
EXPIRE key1 100 //設(shè)置key1 100s后過期
del key1 // 刪除一個key ,成功返回1 ,否則返回0;
ttl key // 查看鍵 還有多長時間過期,單位是s,-2便是key不存在,-1沒設(shè)生存時間
select 0 //代表選擇當(dāng)前數(shù)據(jù)庫,默認(rèn)進(jìn)入0 數(shù)據(jù)庫
exists name //有name鍵 返回1 ,否則返回0;
move age 1 // 把age 移動到1 數(shù)據(jù)庫
persist key1 //取消key1的過期時間
randomkey //隨機返回一個key
type key1 //返回鍵的類型
rename oldname newname //重命名key
info //返回redis數(shù)據(jù)庫狀態(tài)信息
dbsize //返回當(dāng)前數(shù)據(jù)庫中key的數(shù)目
flushdb //清空當(dāng)前數(shù)據(jù)庫中所有的鍵
flushall //清空所有數(shù)據(jù)庫中的所有的key
-------------------------------------------------------------------------------------------------
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。