redis教程

redis教程:

概述

redis是一種支持分布式的nosql數(shù)據(jù)庫(kù),他的數(shù)據(jù)是保存在內(nèi)存中习寸,同時(shí)redis可以定時(shí)把內(nèi)存數(shù)據(jù)同步到磁盤胶惰,即可以將數(shù)據(jù)持久化,并且他比memcached支持更多的數(shù)據(jù)結(jié)構(gòu)(string,list列表[隊(duì)列和棧],set[集合],sorted set[有序集合],hash(hash表))。相關(guān)參考文檔:http://redisdoc.com/index.html

redis使用場(chǎng)景:

  1. 登錄會(huì)話存儲(chǔ):存儲(chǔ)在redis中匿级,與memcached相比,數(shù)據(jù)不會(huì)丟失。
  2. 排行版/計(jì)數(shù)器:比如一些秀場(chǎng)類的項(xiàng)目散庶,經(jīng)常會(huì)有一些前多少名的主播排名。還有一些文章閱讀量的技術(shù),或者新浪微博的點(diǎn)贊數(shù)等乐疆。
  3. 作為消息隊(duì)列:比如celery就是使用redis作為中間人。
  4. 當(dāng)前在線人數(shù):還是之前的秀場(chǎng)例子,會(huì)顯示當(dāng)前系統(tǒng)有多少在線人數(shù)。
  5. 一些常用的數(shù)據(jù)緩存:比如我們的BBS論壇诉字,板塊不會(huì)經(jīng)常變化的,但是每次訪問首頁(yè)都要從mysql中獲取撩匕,可以在redis中緩存起來,不用每次請(qǐng)求數(shù)據(jù)庫(kù)。
  6. 把前200篇文章緩存或者評(píng)論緩存:一般用戶瀏覽網(wǎng)站卤妒,只會(huì)瀏覽前面一部分文章或者評(píng)論,那么可以把前面200篇文章和對(duì)應(yīng)的評(píng)論緩存起來。用戶訪問超過的阱洪,就訪問數(shù)據(jù)庫(kù)承璃,并且以后文章超過200篇,則把之前的文章刪除。
  7. 好友關(guān)系:微博的好友關(guān)系使用redis實(shí)現(xiàn)。
  8. 發(fā)布和訂閱功能:可以用來做聊天軟件垮斯。

redismemcached的比較:

memcached redis
類型 純內(nèi)存數(shù)據(jù)庫(kù) 內(nèi)存磁盤同步數(shù)據(jù)庫(kù)
數(shù)據(jù)類型 在定義value時(shí)就要固定數(shù)據(jù)類型 不需要
虛擬內(nèi)存 不支持 支持
過期策略 支持 支持
存儲(chǔ)數(shù)據(jù)安全 不支持 可以將數(shù)據(jù)同步到dump.db中
災(zāi)難恢復(fù) 不支持 可以將磁盤中的數(shù)據(jù)恢復(fù)到內(nèi)存中
分布式 支持 主從同步
訂閱與發(fā)布 不支持 支持

redisubuntu系統(tǒng)中的安裝與啟動(dòng)

  1. 安裝:

     sudo apt-get install redis-server
    
    
  2. 卸載:

     sudo apt-get purge --auto-remove redis-server
    
    
  3. 啟動(dòng):redis安裝后,默認(rèn)會(huì)自動(dòng)啟動(dòng),可以通過以下命令查看:

     ps aux|grep redis
    
    

    如果想自己手動(dòng)啟動(dòng),可以通過以下命令進(jìn)行啟動(dòng):

     sudo service redis-server start
    
    
  4. 停止:

     sudo service redis-server stop
    
    

redis在windows系統(tǒng)中的安裝與啟動(dòng):

  1. 下載:redis官方是不支持windows操作系統(tǒng)的较沪。但是微軟的開源部門將redis移植到了windows上。因此下載地址不是在redis官網(wǎng)上。而是在github上:https://github.com/MicrosoftArchive/redis/releases贴见。
  2. 安裝:點(diǎn)擊一頓下一步安裝就可以了。
  3. 運(yùn)行:進(jìn)入到redis安裝所在的路徑然后執(zhí)行redis-server.exe redis.windows.conf就可以運(yùn)行了。
  4. 連接:redismysql以及mongo是一樣的辖所,都提供了一個(gè)客戶端進(jìn)行連接典挑。輸入命令redis-cli(前提是redis安裝路徑已經(jīng)加入到環(huán)境變量中了)就可以連接到redis服務(wù)器了。

其他機(jī)器訪問本機(jī)redis服務(wù)器:

想要讓其他機(jī)器訪問本機(jī)的redis服務(wù)器倒庵。那么要修改redis.conf的配置文件浑玛,將bind改成bind [自己的ip地址或者0.0.0.0],其他機(jī)器才能訪問。
注意:bind綁定的是本機(jī)網(wǎng)卡的ip地址,而不是想讓其他機(jī)器連接的ip地址髓迎。如果有多塊網(wǎng)卡橄维,那么可以綁定多個(gè)網(wǎng)卡的ip地址。如果綁定到額是0.0.0.0,那么意味著其他機(jī)器可以通過本機(jī)所有的ip地址進(jìn)行訪問。

對(duì)redis的操作

對(duì)redis的操作可以用兩種方式,第一種方式采用redis-cli,第二種方式采用編程語言,比如Python阎肝、PHPJAVA等嫉父。

  1. 使用redis-cli對(duì)redis進(jìn)行字符串操作:

  2. 啟動(dòng)redis

      sudo service redis-server start
    
    
  3. 連接上

    redis-server
    

      redis-cli -h [ip] -p [端口]
    
    
  4. 添加:

      set key value
      如:
      set username xiaotuo
    
    

    將字符串值value關(guān)聯(lián)到key。如果key已經(jīng)持有其他值,set命令就覆寫舊值涉茧,無視其類型惑淳。并且默認(rèn)的過期時(shí)間是永久,即永遠(yuǎn)不會(huì)過期肠套。

  5. 刪除:

      del key
      如:
      del username
    
    
  6. 設(shè)置過期時(shí)間:

      expire key timeout(單位為秒)
    
    

    也可以在設(shè)置值的時(shí)候,一同指定過期時(shí)間:

      set key value EX timeout
      或:
      setex key timeout value
    
    
  7. 查看過期時(shí)間:

      ttl key
      如:
      ttl username
    
    
  8. 查看當(dāng)前redis中的所有key

      keys *
    
    
  9. 列表操作:

    • 在列表左邊添加元素:

        lpush key value
      
      

      將值value插入到列表key的表頭。如果key不存在轿钠,一個(gè)空列表會(huì)被創(chuàng)建并執(zhí)行lpush操作硫朦。當(dāng)key存在但不是列表類型時(shí)泽裳,將返回一個(gè)錯(cuò)誤。

    • 在列表右邊添加元素:

        rpush key value
      
      

      將值value插入到列表key的表尾嚎朽。如果key不存在锅很,一個(gè)空列表會(huì)被創(chuàng)建并執(zhí)行RPUSH操作。當(dāng)key存在但不是列表類型時(shí)褐奥,返回一個(gè)錯(cuò)誤。

    • 查看列表中的元素:

        lrange key start stop
      
      

      返回列表key中指定區(qū)間內(nèi)的元素驼鹅,區(qū)間以偏移量startstop指定,如果要左邊的第一個(gè)到最后的一個(gè)lrange key 0 -1碉咆。

    • 移除列表中的元素:

      • 移除并返回列表

        key
        

        的頭元素:

          lpop key
        
        
      • 移除并返回列表的尾元素:

        rpop key
        
        
      • 移除并返回列表key的中間元素:

          lrem key count value
        
        

        將刪除key這個(gè)列表中,count個(gè)值為value的元素谓厘。

    • 指定返回第幾個(gè)元素:

        lindex key index
      
      

      將返回key這個(gè)列表中幌羞,索引為index的這個(gè)元素。

    • 獲取列表中的元素個(gè)數(shù):

        llen key
        如:
        llen languages
      
      
    • 刪除指定的元素:

        lrem key count value
        如:
        lrem languages 0 php
      
      

      根據(jù)參數(shù) count 的值竟稳,移除列表中與參數(shù) value 相等的元素属桦。count的值可以是以下幾種:

      • count > 0:從表頭開始向表尾搜索,移除與value相等的元素他爸,數(shù)量為count聂宾。
      • count < 0:從表尾開始向表頭搜索,移除與 value相等的元素诊笤,數(shù)量為count的絕對(duì)值系谐。
      • count = 0:移除表中所有與value 相等的值。
  10. set集合的操作:

    • 添加元素:

        sadd set value1 value2....
        如:
        sadd team xiaotuo datuo
      
      
    • 查看元素:

        smembers set
        如:
        smembers team
      
      
    • 移除元素:

        srem set member...
        如:
        srem team xiaotuo datuo
      
      
    • 查看集合中的元素個(gè)數(shù):

        scard set
        如:
        scard team1
      
      
    • 獲取多個(gè)集合的交集:

        sinter set1 set2
        如:
        sinter team1 team2
      
      
    • 獲取多個(gè)集合的并集:

        sunion set1 set2
        如:
        sunion team1 team2
      
      
    • 獲取多個(gè)集合的差集:

      sdiff set1 set2
      如:
      sdiff team1 team2
      
      
  11. hash哈希操作:

    • 添加一個(gè)新值:

        hset key field value
        如:
        hset website baidu baidu.com
      
      

      將哈希表key中的域field的值設(shè)為value盏混。
      如果key不存在蔚鸥,一個(gè)新的哈希表被創(chuàng)建并進(jìn)行 HSET操作。如果域 field已經(jīng)存在于哈希表中许赃,舊值將被覆蓋止喷。

    • 獲取哈希中的field對(duì)應(yīng)的值:

        hget key field
        如:
        hget website baidu
      
      
    • 刪除field中的某個(gè)field

        hdel key field
        如:
        hdel website baidu
      
      
    • 獲取某個(gè)哈希中所有的fieldvalue

        hgetall key
        如:
        hgetall website
      
      
    • 獲取某個(gè)哈希中所有的field

        hkeys key
        如:
        hkeys website
      
      
    • 獲取某個(gè)哈希中所有的值:

      hvals key
      如:
      hvals website
      
      
    • 判斷哈希中是否存在某個(gè)field

      hexists key field
      如:
      hexists website baidu
      
      
    • 獲取哈希中總共的鍵值對(duì):

      hlen field
      如:
      hlen website
      
      
  12. 事務(wù)操作:Redis事務(wù)可以一次執(zhí)行多個(gè)命令,事務(wù)具有以下特征:

    • 隔離操作:事務(wù)中的所有命令都會(huì)序列化混聊、按順序地執(zhí)行弹谁,不會(huì)被其他命令打擾。

    • 原子操作:事務(wù)中的命令要么全部被執(zhí)行句喜,要么全部都不執(zhí)行预愤。

    • 開啟一個(gè)事務(wù):

        multi
      
      

      以后執(zhí)行的所有命令,都在這個(gè)事務(wù)中執(zhí)行的咳胃。

    • 執(zhí)行事務(wù):

        exec
      
      

      會(huì)將在multiexec中的操作一并提交植康。

    • 取消事務(wù):

        discard
      
      

      會(huì)將multi后的所有命令取消。

    • 監(jiān)視一個(gè)或者多個(gè)key

        watch key...
      
      

      監(jiān)視一個(gè)(或多個(gè))key展懈,如果在事務(wù)執(zhí)行之前這個(gè)(或這些) key被其他命令所改動(dòng)销睁,那么事務(wù)將被打斷。

    • 取消所有key的監(jiān)視:

        unwatch
      
      
  13. 發(fā)布/訂閱操作:

    • 給某個(gè)頻道發(fā)布消息:

        publish channel message
      
      
    • 訂閱某個(gè)頻道的消息:

        subscribe channel
      
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末存崖,一起剝皮案震驚了整個(gè)濱河市冻记,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌来惧,老刑警劉巖冗栗,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異供搀,居然都是意外死亡隅居,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門趁曼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來军浆,“玉大人,你說我怎么就攤上這事挡闰∑谷冢” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵摄悯,是天一觀的道長(zhǎng)赞季。 經(jīng)常有香客問我,道長(zhǎng)奢驯,這世上最難降的妖魔是什么申钩? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮瘪阁,結(jié)果婚禮上撒遣,老公的妹妹穿的比我還像新娘邮偎。我一直安慰自己,他們只是感情好义黎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布禾进。 她就那樣靜靜地躺著,像睡著了一般廉涕。 火紅的嫁衣襯著肌膚如雪泻云。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天狐蜕,我揣著相機(jī)與錄音宠纯,去河邊找鬼。 笑死层释,一個(gè)胖子當(dāng)著我的面吹牛婆瓜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贡羔,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼勃救,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了治力?” 一聲冷哼從身側(cè)響起蒙秒,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宵统,沒想到半個(gè)月后晕讲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡马澈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年瓢省,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痊班。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡勤婚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涤伐,到底是詐尸還是另有隱情馒胆,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布凝果,位于F島的核電站祝迂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏器净。R本人自食惡果不足惜型雳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纠俭,春花似錦沿量、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至匙赞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妖碉,已是汗流浹背涌庭。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留欧宜,地道東北人坐榆。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像冗茸,于是被迫代替她去往敵國(guó)和親席镀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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