Redis/參數(shù)/數(shù)據(jù)類型

安裝:

yum install gcc-c++
yum install -y tcl
wget http://download.redis.io/releases/redis-3.2.3.tar.gz
tar xzf redis-3.2.3.tar.gz
cd redis-3.2.3
make
make install
拷貝配置文件
mkdir -p /etc/redis
cp redis.conf/etc/redis
vi /etc/redis/redis.conf//根據(jù)需要修改,如: daemonize yes (no-->yes)讓server以守護進程在后臺執(zhí)行挠唆。
redis-server /etc/redis/redis.conf //根據(jù)指定的配置文件啟動处窥,redis-server 根據(jù)默認配置文件啟動
ps -ef | grep redis //查看是否啟動
redis-cli // 啟動客戶端,遠程:$ redis-cli -h host -p port -a password
127.0.0.1:6379> ping
PONG
啟動成功

參數(shù):
在cli端查看配置參數(shù)
* 號是查看所有參數(shù)玄组。


有些參數(shù)在運行后不可以修改滔驾。

daemonize no 默認情況下,redis不是在后臺運行的俄讹,如果需要在后臺運行哆致,把該項的值更改為yes

daemonize yes

當redis在后臺運行的時候,Redis默認會把pid文件放在/var/run/redis.pid患膛,你可以配置到其他地址摊阀。當運行多個redis服務時,需要指定不同的pid文件和端口

pidfile /var/run/redis.pid

指定redis運行的端口,默認是6379

port 6379

指定redis只接收來自于該IP地址的請求胞此,如果不進行設置臣咖,那么將處理所有請求。
bind的是redis所在服務器網(wǎng)卡的ip豌鹤。也就是說亡哄,如果你的redis服務器有兩張網(wǎng)卡,一張是ip-1,另一張是ip-2布疙,如果你bind ip-1.那么只有請求ip-1的請求會被受理蚊惯。例如在IP為128.199.173.52的機器上設置了 bind 128.199.173.52,在另一臺機器上可以通過redis-cli -h 128.199.173.52 -p 6379 -a password 訪問灵临。

bind 127.0.0.1

設置客戶端連接時的超時時間截型,單位為秒。當客戶端在這段時間內沒有發(fā)出任何指令儒溉,那么關閉該連接
0是關閉此設置

timeout 0

指定日志記錄級別
Redis總共支持四個級別:debug宦焦、verbose、notice顿涣、warning波闹,默認為verbose
debug 記錄很多信息,用于開發(fā)和測試
varbose 有用的信息涛碑,不像debug會記錄那么多
notice 普通的verbose精堕,常用于生產(chǎn)環(huán)境
warning 只有非常重要或者嚴重的信息會記錄到日志

loglevel debug

配置log文件地址
默認值為stdout,標準輸出蒲障,若后臺模式會輸出到/dev/null
logfile stdout

logfile /var/log/redis/redis.log

可用數(shù)據(jù)庫數(shù)
默認值為16歹篓,默認數(shù)據(jù)庫為0,數(shù)據(jù)庫范圍在0-(database-1)之間

databases 16

保存數(shù)據(jù)到磁盤揉阎,格式如下:
save <seconds> <changes>
指出在多長時間內庄撮,有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件rdb毙籽。
相當于條件觸發(fā)抓取快照洞斯,這個可以多個條件配合
比如默認配置文件中的設置,就設置了三個條件
save 900 1 900秒內至少有1個key被改變
save 300 10 300秒內至少有300個key被改變
save 60 10000 60秒內至少有10000個key被改變

save 900 1
save 300 10
save 60 10000

存儲至本地數(shù)據(jù)庫時(持久化到rdb文件)是否壓縮數(shù)據(jù)坑赡,默認為yes

rdbcompression yes

本地持久化數(shù)據(jù)庫文件名巡扇,默認值為dump.rdb

dbfilename dump.rdb

工作目錄
數(shù)據(jù)庫鏡像備份的文件放置的路徑。
這里的路徑跟文件名要分開配置是因為redis在進行備份時垮衷,先會將當前數(shù)據(jù)庫的狀態(tài)寫入到一個臨時文件中厅翔,等備份完成時,
再把該該臨時文件替換為上面所指定的文件搀突,而這里的臨時文件和上面所配置的備份文件都會放在這個指定的路徑當中刀闷。
AOF文件也會存放在這個目錄下面
注意這里必須指定一個目錄而不是文件

dir ./

主從復制. 設置該數(shù)據(jù)庫為其他數(shù)據(jù)庫的從數(shù)據(jù)庫.
設置當本機為slav服務時,設置master服務的IP地址及端口,在Redis啟動時甸昏,它會自動從master進行數(shù)據(jù)同步

slaveof <masterip> <masterport>

當master服務設置了密碼保護時(用requirepass制定的密碼)
slav服務連接master的密碼(在slave端配置)

masterauth <master-password>

當從庫同主機失去連接或者復制正在進行顽分,從機庫有兩種運行方式:

  1. 如果slave-serve-stale-data設置為yes(默認設置),從庫會繼續(xù)相應客戶端的請求
  2. 如果slave-serve-stale-data是指為no施蜜,出去INFO和SLAVOF命令之外的任何請求都會返回一個
    錯誤"SYNC with master in progress"

slave-serve-stale-data yes

從庫會按照一個時間間隔向主庫發(fā)送PINGs.可以通過repl-ping-slave-period設置這個時間間隔卒蘸,默認是10秒

repl-ping-slave-period 10

repl-timeout 設置主庫批量數(shù)據(jù)傳輸時間或者ping回復時間間隔,默認值是60秒
一定要確保repl-timeout大于repl-ping-slave-period

repl-timeout 60

設置客戶端連接后進行任何其他指定前需要使用的密碼翻默。
警告:因為redis速度相當快缸沃,所以在一臺比較好的服務器下,一個外部的用戶可以在一秒鐘進行150K次的密碼嘗試修械,這意味著你需要指定非常非常強大的密碼來防止暴力破解

requirepass password

設置同一時間最大客戶端連接數(shù)趾牧,默認無限制,Redis可以同時打開的客戶端連接數(shù)為Redis進程可以打開的最大文件描述符數(shù)肯污,
如果設置 maxclients 0翘单,表示不作限制。
當客戶端連接數(shù)到達限制時蹦渣,Redis會關閉新的連接并向客戶端返回max number of clients reached錯誤信息

maxclients 0

指定Redis最大內存限制哄芜,Redis在啟動時會把數(shù)據(jù)加載到內存中,達到最大內存后柬唯,Redis會先嘗試清除已到期或即將到期的Key
Redis同時也會移除空的list對象
當此方法處理后认臊,仍然到達最大內存設置,將無法再進行寫入操作权逗,但仍然可以進行讀取操作
注意:Redis新的vm機制美尸,會把Key存放內存冤议,Value會存放在swap區(qū)
maxmemory的設置比較適合于把redis當作于類似memcached的緩存來使用斟薇,而不適合當做一個真實的DB。
當把Redis當做一個真實的數(shù)據(jù)庫使用的時候恕酸,內存使用將是一個很大的開銷

maxmemory <bytes>

當內存達到最大值的時候Redis會選擇刪除哪些數(shù)據(jù)堪滨?有五種方式可供選擇
volatile-lru -> 利用LRU算法移除設置過過期時間的key (LRU:最近使用 Least Recently Used )
allkeys-lru -> 利用LRU算法移除任何key
volatile-random -> 移除設置過過期時間的隨機key
allkeys->random -> 隨機key
volatile-ttl -> 移除即將過期的key(minor TTL)
noeviction -> 不移除任何可以,只是返回一個寫錯誤
注意:對于上面的策略蕊温,如果沒有合適的key可以移除袱箱,當寫的時候Redis會返回一個錯誤
寫命令包括: set setnx setex append
incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
getset mset msetnx exec sort
默認是:

maxmemory-policy volatile-lru

LRU 和 minimal TTL 算法都不是精準的算法,但是相對精確的算法(為了節(jié)省內存)义矛,隨意你可以選擇樣本大小進行檢測发笔。
Redis默認的灰選擇3個樣本進行檢測,你可以通過maxmemory-samples進行設置

maxmemory-samples 3

默認情況下凉翻,redis會在后臺異步的把數(shù)據(jù)庫鏡像備份到磁盤了讨,但是該備份是非常耗時的,而且備份也不能很頻繁,如果發(fā)生諸如拉閘限電前计、拔插頭等狀況胞谭,那么將造成比較大范圍的數(shù)據(jù)丟失。
所以redis提供了另外一種更加高效的數(shù)據(jù)庫備份及災難恢復方式男杈。
開啟append only模式之后丈屹,redis會把所接收到的每一次寫操作請求都追加到appendonly.aof文件中,當redis重新啟動時伶棒,會從該文件恢復出之前的狀態(tài)旺垒。
但是這樣會造成appendonly.aof文件過大,所以redis還支持了BGREWRITEAOF指令苞冯,對appendonly.aof 進行重新整理袖牙。
你可以同時開啟asynchronous dumps 和 AOF

appendonly no

AOF文件名稱 (默認: "appendonly.aof")
appendfilename appendonly.aof
Redis支持三種同步AOF文件的策略:
no: 不進行同步,系統(tǒng)去操作 . Faster.
always: always表示每次有寫操作都進行同步. Slow, Safest.
everysec: 表示對寫操作進行累積舅锄,每秒同步一次. Compromise.
默認是"everysec"鞭达,按照速度和安全折中這是最好的。
如果想讓Redis能更高效的運行皇忿,你也可以設置為"no"畴蹭,讓操作系統(tǒng)決定什么時候去執(zhí)行
或者相反想讓數(shù)據(jù)更安全你也可以設置為"always"
如果不確定就用 "everysec".

appendfsync everysec

AOF策略設置為always或者everysec時,后臺處理進程(后臺保存或者AOF日志重寫)會執(zhí)行大量的I/O操作
在某些Linux配置中會阻止過長的fsync()請求鳍烁。注意現(xiàn)在沒有任何修復叨襟,即使fsync在另外一個線程進行處理
為了減緩這個問題,可以設置下面這個參數(shù)no-appendfsync-on-rewrite

no-appendfsync-on-rewrite no

AOF 自動重寫
當AOF文件增長到一定大小的時候Redis能夠調用 BGREWRITEAOF 對日志文件進行重寫
它是這樣工作的:Redis會記住上次進行些日志后文件的大小(如果從開機以來還沒進行過重寫幔荒,那日子大小在開機的時候確定)
基礎大小會同現(xiàn)在的大小進行比較糊闽。如果現(xiàn)在的大小比基礎大小大制定的百分比,重寫功能將啟動
同時需要指定一個最小大小用于AOF重寫爹梁,這個用于阻止即使文件很小但是增長幅度很大也去重寫AOF文件的情況
設置 percentage 為0就關閉這個特性

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

當hash中包含超過指定元素個數(shù)并且最大的元素沒有超過臨界時右犹,
hash將以一種特殊的編碼方式(大大減少內存使用)來存儲,這里可以設置這兩個臨界值
Redis Hash對應Value內部實際就是一個HashMap姚垃,實際這里會有2種不同實現(xiàn)念链,
這個Hash的成員比較少時Redis為了節(jié)省內存會采用類似一維數(shù)組的方式來緊湊存儲,而不會采用真正的HashMap結構积糯,對應的value redisObject的encoding為zipmap,
如果Hash中字段的數(shù)量小于參數(shù)值掂墓,Redis將對該Key的Hash Value采用特殊編碼。

hash-max-zipmap-entries 64

如果Hash中各個字段的最大長度不超過512字節(jié)看成,Redis也將對該Key的Hash Value采用特殊編碼方式君编。

hash-max-zipmap-value 512

list數(shù)據(jù)類型多少節(jié)點以下會采用去指針的緊湊存儲格式。
list數(shù)據(jù)類型節(jié)點值大小小于多少字節(jié)會采用緊湊存儲格式川慌。

list-max-ziplist-entries 512
list-max-ziplist-value 64

set數(shù)據(jù)類型內部數(shù)據(jù)如果全部是數(shù)值型吃嘿,且包含多少節(jié)點以下會采用緊湊格式存儲偿荷。

set-max-intset-entries 512

zsort數(shù)據(jù)類型多少節(jié)點以下會采用去指針的緊湊存儲格式。
zsort數(shù)據(jù)類型節(jié)點值大小小于多少字節(jié)會采用緊湊存儲格式唠椭。

zset-max-ziplist-entries 128
zset-max-ziplist-value 64

Redis將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash跳纳,可以降低內存的使用
當你的使用場景中,有非常嚴格的實時性需要贪嫂,不能夠接受Redis時不時的對請求有2毫秒的延遲的話寺庄,把這項配置為no。
如果沒有這么嚴格的實時性要求,可以設置為yes,以便能夠盡可能快的釋放內存

activerehashing yes

指定包含其它的配置文件贱纠,可以在同一主機上多個Redis實例之間使用同一份配置文件媳溺,而同時各個實例又擁有自己的特定配置文件

include /path/to/local.conf
include /path/to/other.conf

數(shù)據(jù)類型:
string
string類型是Redis最基本的數(shù)據(jù)類型偏陪,一個鍵最大能存儲512MB。
get key(根據(jù)k得到v),set key value(設置kv)。

incr(v加1)贞岭,decr(v減1),incrby(v和參數(shù)做加法)搓侄,decrby(v和參數(shù)做減法)瞄桨。



setnx key value(k不存在才設置),setn key value xx(k存在才設置)讶踪。



mset(插入多個kv)芯侥,mget(獲取多個k的v)。

getset(得到原來的v乳讥,插入新v)柱查,append(在原v上追加),strlen(v的長度)云石。



incrbyfloat(v與浮點相加)唉工,getrange(v的字符范圍),setrange(更改v的部分字符)留晚。

hash
hset (設置hash屬性)酵紫,hget(得到hash屬性)告嘲,hdel(刪除哈希屬性)错维,hgetall(得到hash類型的v,不能用get)橄唬。


hexists(判斷hash屬性存在)赋焕,hlen(hash屬性個數(shù))

hmset,hmget(批量設置仰楚,取出hash的屬性)



hincrby(hash屬性的加法)


hgetall(得到所有hash的kv)隆判,hvals(得到所有hash的v)犬庇,hkeys(得到所有hash的k)


list
lpush/lpop棧。lpush/rpop隊列侨嘀。
rpush:從右側插入list
linsert:在某值的前或后插入
lpop:從左側彈出
lrange:取出list指定下標范圍的值

lrem key count value:刪除count個和value一樣的值臭挽。count>0從左到右。count<0咬腕,從右到左欢峰。count=0,刪除所有涨共。
ltrim key start end: 根據(jù)索引范圍修剪表纽帖。
lindex key index:根據(jù)索引取出值。
llen key:得到list的長度举反。


lset key index value:根據(jù)索引設值懊直。

set
sadd打標簽。spop/srandmember得到隨機值火鼻。sinter社交關系室囊。
sadd key value:想集合中插入,已存在則失敗魁索。
srem key value:刪除集合中的指定value波俄。
scard key:返回集合大小。
sismember key value:是否存在value蛾默,1為存在懦铺。
spop key count:隨機刪除集合中的count個value。
smember key:返回集合的所有數(shù)據(jù)支鸡。
srandmember key count:隨機返回count個集合中的數(shù)據(jù)冬念。

sdiff set set:差集。
sinter set set:交集牧挣。
sunion set set:并集急前。

sorted set
zadd key score value:插入有序集合,可以是多對瀑构。
zscore key value:得到分數(shù)裆针。
zincrby key score value:分數(shù)加法。
zcard key:得到集合的元素個數(shù)寺晌。
zrank key value:驗證value是否存在世吨。
zrange key start end withscores:根據(jù)索引取出集合的元素。
zrem key value:根據(jù)value刪除元素呻征。

zrangebyscore key minscore maxscore withscores:取出范圍內的元素耘婚。
zcount key minscore maxscore:統(tǒng)計范圍內的個數(shù)。



zremrangebyrank key startend:根據(jù)升序刪除指定索引的元素


其他鍵值操作:
type key:返回value的類型陆赋。


del key:刪除對應的鍵值對沐祷。

exist key:鍵值是否存在嚷闭。
rename key newkey:重新命名key,原key必須存在赖临。

expire key num:設置時效胞锰。
ttl key:查看剩余時效。沒有時效為-1兢榨,過期為-2胜蛉。

dbsize:鍵值對的數(shù)量。
keys *:查看所有key色乾。和smenbers一樣是長命令誊册,盡量不用。

select num:選擇數(shù)據(jù)庫(0-15)暖璧,默認使用0庫案怯。不建議使用多庫,建議采用多實例澎办。

scan cursor :cursor設為0表示重新開始迭代嘲碱。的返回值是一個包含兩個元素的數(shù)組, 第一個數(shù)組元素是用于進行下一次迭代的新游標局蚀, 而第二個數(shù)組元素則是一個數(shù)組包含了所有被迭代的元素麦锯。當服務器向用戶返回值為 0 的游標時, 表示迭代已結束琅绅。

scan cursor count num:用戶可以通過增量式迭代命令提供的COUNT選項來指定每次迭代返回元素個數(shù)的上限扶欣。
scan cursor match pattern:匹配工作是在命令從數(shù)據(jù)集中取出元素后進行的, 所以或許會在多次執(zhí)行中都不返回任何元素千扶。


要點:
啟動服務端:redis-server /etc/redis/redis.conf
啟動客戶端:redis-cli -h 128.199.173.52 -p 6379 & redis-cli -h 128.199.173.52 -p 6379 -a password
退出客戶端:exit
關閉服務端:shutdown
綁定IP:bind的是redis所在服務器網(wǎng)卡的ip
設置密碼:requirepass password

string
set key value
get key value
mset key1 value1 key2 value2
mget key1 key2
incr key
decr key
append key value

hash
hset user:1 age 25
hget user:1 age
hdel user:1 age(如果最后一個屬性被刪除料祠,user:1也被刪除)
hgetall user:1
hmset user:1 age 25 name aaa
hmget user:1 age name

list
lpush key value
rpush key value
lpop key value
rpop key value
lrange key 0 -1
lindex key 5
lset key index value
llen key
刪除指定下標的數(shù)據(jù)
lset ListKey index "deleted"
lrem ListKey 0 "deleted"

set
sadd key value
srem key value
scard key 返回集合大小
sismember key value 是否存在value,1為存在
smember key 返回集合的所有數(shù)據(jù)

sorted set
zadd key score value
zscore key value 得到分數(shù)
zincrby key score value 分數(shù)加法
zcard key 得到集合的元素個數(shù)
zrange key start end withscores 根據(jù)索引取出集合的元素
zrem key value 根據(jù)value刪除元素


參考:http://www.redis.cn/commands

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末澎羞,一起剝皮案震驚了整個濱河市髓绽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妆绞,老刑警劉巖顺呕,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異括饶,居然都是意外死亡株茶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門巷帝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忌卤,“玉大人扫夜,你說我怎么就攤上這事楞泼〕刍玻” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵堕阔,是天一觀的道長棍厂。 經(jīng)常有香客問我,道長超陆,這世上最難降的妖魔是什么牺弹? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮时呀,結果婚禮上张漂,老公的妹妹穿的比我還像新娘。我一直安慰自己谨娜,他們只是感情好航攒,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趴梢,像睡著了一般漠畜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坞靶,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天憔狞,我揣著相機與錄音,去河邊找鬼彰阴。 笑死瘾敢,一個胖子當著我的面吹牛,可吹牛的內容都是我干的尿这。 我是一名探鬼主播廉丽,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼妻味!你這毒婦竟也來了正压?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤责球,失蹤者是張志新(化名)和其女友劉穎焦履,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雏逾,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡嘉裤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了栖博。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屑宠。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖仇让,靈堂內的尸體忽然破棺而出典奉,到底是詐尸還是另有隱情躺翻,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布卫玖,位于F島的核電站公你,受9級特大地震影響,放射性物質發(fā)生泄漏假瞬。R本人自食惡果不足惜陕靠,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脱茉。 院中可真熱鬧剪芥,春花似錦、人聲如沸琴许。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虚吟。三九已至寸认,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間串慰,已是汗流浹背偏塞。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留邦鲫,地道東北人灸叼。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像庆捺,于是被迫代替她去往敵國和親古今。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內容