redis 筆記

  • 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雅镊。
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市刃滓,隨后出現(xiàn)的幾起案子仁烹,更是在濱河造成了極大的恐慌,老刑警劉巖咧虎,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卓缰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡砰诵,警方通過(guò)查閱死者的電腦和手機(jī)征唬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)茁彭,“玉大人总寒,你說(shuō)我怎么就攤上這事±矸危” “怎么了摄闸?”我有些...
    開(kāi)封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)妹萨。 經(jīng)常有香客問(wèn)我年枕,道長(zhǎng),這世上最難降的妖魔是什么眠副? 我笑而不...
    開(kāi)封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任画切,我火速辦了婚禮,結(jié)果婚禮上囱怕,老公的妹妹穿的比我還像新娘霍弹。我一直安慰自己,他們只是感情好娃弓,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布典格。 她就那樣靜靜地躺著,像睡著了一般台丛。 火紅的嫁衣襯著肌膚如雪耍缴。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天挽霉,我揣著相機(jī)與錄音防嗡,去河邊找鬼。 笑死侠坎,一個(gè)胖子當(dāng)著我的面吹牛蚁趁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播实胸,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼他嫡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼番官!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起钢属,我...
    開(kāi)封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤徘熔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后淆党,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體酷师,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年宁否,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窒升。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡慕匠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出域醇,到底是詐尸還是另有隱情台谊,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布譬挚,位于F島的核電站锅铅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏减宣。R本人自食惡果不足惜盐须,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漆腌。 院中可真熱鬧贼邓,春花似錦、人聲如沸闷尿。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)填具。三九已至统舀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劳景,已是汗流浹背誉简。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盟广,地道東北人闷串。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像衡蚂,于是被迫代替她去往敵國(guó)和親窿克。 傳聞我的和親對(duì)象是個(gè)殘疾皇子骏庸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容