-
redis簡(jiǎn)介
redis是一個(gè)開(kāi)源的key-value數(shù)據(jù)庫(kù)形娇。
它又經(jīng)常被認(rèn)為是一個(gè)數(shù)據(jù)結(jié)構(gòu)服務(wù)器锰霜。
因?yàn)樗膙alue不僅包括基本的string類型還有 list,set ,sorted set和hash類型。當(dāng)然這些類型的元素也都是string類型桐早。也就是說(shuō)list,set這些集合類型也只能包含string 類型癣缅。
你可以在這些類型上做很多原子性的操作。比如對(duì)一個(gè)字符value追加字符串(APPEND命令)哄酝。加加或者減減一個(gè)數(shù)字字符串(INCR命令友存,當(dāng) 然是按整數(shù)處理的).可以對(duì)list類型進(jìn)行push,或者pop元素操作(可以模擬棧和隊(duì)列)。
對(duì)于set類型可以進(jìn)行一些集合相關(guān)操作 (intersection union difference)陶衅。memcache也有類似與++,--的命令屡立。
不過(guò)memcache的 value只包括string類型。遠(yuǎn)沒(méi)有redis的value類型豐富膨俐。和memcahe一樣為了性能。redis的數(shù)據(jù)通常都是放到內(nèi)存中的。當(dāng)然 redis可以每間隔一定時(shí)間將內(nèi)存中數(shù)據(jù)寫入到磁盤以防止數(shù)據(jù)丟失匾委。
redis也支持主從復(fù)制機(jī)制(master-slave replication)咖气。
redis的其他特性包括簡(jiǎn)單的事務(wù)支持和 發(fā)布訂閱(pub/sub)通道功能,而且redis配置管理非常簡(jiǎn)單斩松。
還有各種語(yǔ)言版本的開(kāi)源客戶端類庫(kù)。
-
redis安裝
1、windows
下載安裝包嫡霞,打開(kāi)cmd端姚,切換到redis目錄,運(yùn)行redis-server.exe redis.conf
通過(guò)redis-cli.exe -h 127.0.0.1 -p 6379方式連接
2剩膘、linux
可以下載源碼,安裝奠涌,也可以下載壓縮文件
通過(guò) ./redis-server redis.conf
-
redis 基本操作
1极祸、啟動(dòng)redis
src/redis-server或者src/redis-server redis.conf
src/redis-server redis.conf 1>log.log 2>errlog.log
1為標(biāo)準(zhǔn)輸出蒜田,2為錯(cuò)誤輸出
將 Redis 作為 Linux 服務(wù)隨機(jī)啟動(dòng)
vi /etc/rc.local, 加入代碼:
/root/install/redis-2.4.9/src/redis-server
2、Redis連接客戶端
src/redis-cli 連接默認(rèn)端口
./redis-cli -h -p -a 指定host,port科阎,password
3错英、增刪改查
set key value 設(shè)置key值為value
get key 取出當(dāng)前key值
del key 刪除當(dāng)前key
exists key 判斷當(dāng)前key是否存在
keys * 取出當(dāng)前匹配的所有key
move key ad4 移動(dòng)key鍵值對(duì)到ad4數(shù)據(jù)庫(kù)
persit key 移除當(dāng)前key的過(guò)期時(shí)間
randomkey 隨機(jī)返回一個(gè)key
rename 重命名key
type 返回值的數(shù)據(jù)類型
ping 測(cè)試連接是否存在
echo name 打印
quit 退出
dbsize 當(dāng)前數(shù)據(jù)庫(kù)中key的數(shù)量
info 服務(wù)器基本信息
monitor 實(shí)時(shí)轉(zhuǎn)儲(chǔ)收到的請(qǐng)求
config get 獲取服務(wù)器的參數(shù)配置
flushdb 清空當(dāng)前數(shù)據(jù)庫(kù)
flushall 清除所有數(shù)據(jù)庫(kù)
-
redis常用配置
redis配置文件位于 Redis 安裝目錄下判哥,文件名為 redis.conf
1锌仅、通過(guò) CONFIG 命令查看或設(shè)置配置項(xiàng)
>>> CONFIG GET CONFIG_SETTING_NAME
>>> CONFIG GET * 獲取所有配置項(xiàng)
2伊脓、通過(guò)修改 redis.conf 文件或使用 CONFIG set 命令來(lái)修改配置
>>> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
3、參數(shù)說(shuō)明
redis.conf 常用配置項(xiàng)說(shuō)明
1邪狞、daemonize no
Redis默認(rèn)不是以守護(hù)進(jìn)程的方式運(yùn)行米丘,可以通過(guò)該配置項(xiàng)修改吁津,使用yes啟用守護(hù)進(jìn)程
2稍算、pidfile /var/run/redis.pid
當(dāng)Redis以守護(hù)進(jìn)程方式運(yùn)行時(shí),Redis默認(rèn)會(huì)把pid寫入/var/run/redis.pid文件,可以通過(guò)pidfile指定要寫入的文件
3汞贸、port 6379
指定Redis監(jiān)聽(tīng)端口,默認(rèn)端口為6379
4聂沙、timeout 300
當(dāng)客戶端閑置多長(zhǎng)時(shí)間后關(guān)閉連接坷随,如果指定為0翁狐,表示關(guān)閉該功能
5窃躲、loglevel verbose
指定日志的記錄級(jí)別,Redis總共支持四個(gè)級(jí)別:debug,verbose,notice,warning,默認(rèn)為verbose
6、 logfile stdout
日志記錄方式啦撮,默認(rèn)為標(biāo)準(zhǔn)輸出锥涕,如果配置redis為守護(hù)進(jìn)程方式運(yùn)行,而這里配置為日志記錄方式為標(biāo)準(zhǔn)輸出尺栖,則日志將會(huì)發(fā)送至/dev/null(回收站)
7挫以、databases 16
設(shè)置數(shù)據(jù)庫(kù)的數(shù)量大磺,默認(rèn)數(shù)據(jù)庫(kù)為0抡句,可以使用SELECT <dbid>命令在連接上指定數(shù)據(jù)庫(kù)id
8锐锣、save <seconds> <changes>
指定在多長(zhǎng)時(shí)間內(nèi)刺下,有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件拜马,可以多個(gè)條件配合
Redis默認(rèn)配置文件中提供了三個(gè)條件:
save 900 1
save 300 10
save 60 10000
分別表示900秒(15分鐘)內(nèi)有1個(gè)更改出刷,300秒(5分鐘)內(nèi)有10個(gè)更改以及60秒內(nèi)有10000個(gè)更改
9雀摘、dbfilename dump.rdb
指定本地?cái)?shù)據(jù)庫(kù)文件名裸删,默認(rèn)值為dump.rdb
10、dir ./
指定本地?cái)?shù)據(jù)庫(kù)存放目錄
11阵赠、slaveof <masterip> <masterport>
設(shè)置本機(jī)為slave服務(wù)時(shí)涯塔,設(shè)置master服務(wù)的ip及端口,在redis啟動(dòng)時(shí)清蚀,它會(huì)自動(dòng)從master進(jìn)行數(shù)據(jù)同步
12匕荸、masterauth <master-password>
當(dāng)master設(shè)置密碼時(shí),slave服務(wù)連接master的密碼
13枷邪、requirepass foobared
設(shè)置Redis連接密碼榛搔,如果配置了連接密碼,客戶端在連接redis時(shí)需要通過(guò)auth<password> 命令提供密碼,默認(rèn)關(guān)閉
14践惑、maxmemory <bytes>
指定Redis最大內(nèi)存限制腹泌,Redis在啟動(dòng)時(shí)會(huì)把數(shù)據(jù)加載到內(nèi)存中,達(dá)到最大內(nèi)存后尔觉,Redis會(huì)先嘗試清除已到期或即將到期的Key凉袱,
當(dāng)此方法處理后,仍然到達(dá)最大內(nèi)存設(shè)置侦铜,將無(wú)法再進(jìn)行寫入操作专甩,但仍然可以進(jìn)行讀取操作。
Redis新的vm機(jī)制钉稍,會(huì)把Key存放內(nèi)存涤躲,Value會(huì)存放在swap區(qū)
15、appendonly no
指定是否在每次更新操作后進(jìn)行日志記錄嫁盲,Redis在默認(rèn)情況下是異步的把數(shù)據(jù)寫入磁盤篓叶,如果不開(kāi)啟,可能會(huì)在斷電時(shí)導(dǎo)致一段時(shí)間內(nèi)的數(shù)據(jù)丟失羞秤。
因?yàn)?redis本身同步數(shù)據(jù)文件是按上面save條件來(lái)同步的缸托,所以有的數(shù)據(jù)會(huì)在一段時(shí)間內(nèi)只存在于內(nèi)存中。默認(rèn)為no
16瘾蛋、appendfilename appendonly.aof
指定更新日志文件名俐镐,默認(rèn)為appendonly.aof
17、appendfsync everysec
指定更新日志條件哺哼,共有3個(gè)可選值:
no:表示等操作系統(tǒng)進(jìn)行數(shù)據(jù)緩存同步到磁盤(快)
always:表示每次更新操作后手動(dòng)調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢佩抹,安全)
everysec:表示每秒同步一次(折衷,默認(rèn)值)
18取董、include /path/to/local.conf
指定包含其它的配置文件棍苹,可以在同一主機(jī)上多個(gè)Redis實(shí)例之間使用同一份配置文件,而同時(shí)各個(gè)實(shí)例又擁有自己的特定配置文件
-
redis數(shù)據(jù)類型
Redis支持五種數(shù)據(jù)類型:string(字符串)茵汰,hash(哈希)枢里,list(列表),set(集合)及zset(sorted set:有序集合)
1蹂午、keys
redis本質(zhì)上一個(gè)key-value db栏豺,所以我們首先來(lái)看看他的key.首先key也是字符串類型,但是key中不能包括邊界字符
由于key不是binary safe的字符串豆胸,所以像"my key"和"mykey\n"這樣包含空格和換行的key是不允許的
順便說(shuō)一下在redis內(nèi)部并不限制使用binary字符奥洼,這是redis協(xié)議限制的。
key相關(guān)的命令:
exits key 測(cè)試指定key是否存在晚胡,返回1表示存在灵奖,0不存在
del key1 key2 ....keyN 刪除給定key,返回刪除key的數(shù)目嚼沿,0表示給定key都不存在
type key 返回給定key的value類型。返回 none 表示不存在key,string字符類型桑寨,list 鏈表類型 set 無(wú)序集合類型...
keys pattern 返回匹配指定模式的所有key(* [] ?) 三種匹配方式
randomkey 返回從當(dāng)前數(shù)據(jù)庫(kù)中隨機(jī)選擇的一個(gè)key,如果當(dāng)前數(shù)據(jù)庫(kù)是空的伏尼,返回空串
rename oldkey newkey 原子的重命名一個(gè)key,如果newkey存在,將會(huì)被覆蓋尉尾,返回1表示成功,0失敗燥透∩秤剑可能是oldkey不存在或者和newkey相同
renamenx oldkey newkey 同上,但是如果newkey存在返回失敗
dbsize 返回當(dāng)前數(shù)據(jù)庫(kù)的key數(shù)量
expire key seconds 為key指定過(guò)期時(shí)間班套,單位是秒肢藐。返回1成功,0表示key已經(jīng)設(shè)置過(guò)過(guò)期時(shí)間或者不存在
ttl key 返回設(shè)置過(guò)過(guò)期時(shí)間的key的剩余過(guò)期秒數(shù) -1表示key不存在或者沒(méi)有設(shè)置過(guò)過(guò)期時(shí)間
select db-index 通過(guò)索引選擇數(shù)據(jù)庫(kù)吱韭,默認(rèn)連接的數(shù)據(jù)庫(kù)所有是0,默認(rèn)數(shù)據(jù)庫(kù)數(shù)是16個(gè)吆豹。返回1表示成功,0失敗
move key db-index 將key從當(dāng)前數(shù)據(jù)庫(kù)移動(dòng)到指定數(shù)據(jù)庫(kù)理盆。返回1成功痘煤。0 如果key不存在,或者已經(jīng)在指定數(shù)據(jù)庫(kù)中
flushdb 刪除當(dāng)前數(shù)據(jù)庫(kù)中所有key,此方法不會(huì)失敗猿规。慎用
flushall 刪除所有數(shù)據(jù)庫(kù)中的所有key衷快,此方法不會(huì)失敗。更加慎用
2姨俩、string 類型
string是redis最基本的類型蘸拔,而且string類型是二進(jìn)制安全的。意思是redis的string可以包含任何數(shù)據(jù)环葵。比如jpg圖片或者序列化的對(duì)象调窍。從內(nèi)部實(shí)現(xiàn)來(lái)看其實(shí)string可以看作byte數(shù)組,最大上限是1G字節(jié)张遭。
如果只用string類型邓萨,redis就可以被看作加上持久化特性的memcached。
string命令如下:
set key value 設(shè)置key對(duì)應(yīng)的值為string類型的value,返回1表示成功帝璧,0失敗
setnx key value 同上先誉,如果key已經(jīng)存在,返回0 的烁。nx 是not exist的意思
get key 獲取key對(duì)應(yīng)的string值,如果key不存在返回nil
getset key value 原子的設(shè)置key的值褐耳,并返回key的舊值。如果key不存在返回nil
mget key1 key2 ... keyN 一次獲取多個(gè)key的值渴庆,如果對(duì)應(yīng)key不存在铃芦,則對(duì)應(yīng)返回nil雅镊。