1. 程式人生 > 其它 >redis新手入門教程:

redis新手入門教程:

概述

redis是一種支援分散式的nosql資料庫,他的資料是儲存在記憶體中,同時redis可以定時把記憶體資料同步到磁碟,即可以將資料持久化,並且他比memcached支援更多的資料結構(string,list列表[佇列和棧],set[集合],sorted set[有序集合],hash(hash表))。Pycharm啟用碼教程使用更多解釋請見:http://vrg123.com

相關參考文件:http://redisdoc.com/index.html

redis使用場景:

  1. 登入會話儲存:儲存在redis中,與memcached相比,資料不會丟失。
  2. 排行版/計數器:比如一些秀場類的專案,經常會有一些前多少名的主播排名。還有一些文章閱讀量的技術,或者新浪微博的點贊數等。
  3. 作為訊息佇列:比如celery就是使用redis作為中間人。
  4. 當前線上人數:還是之前的秀場例子,會顯示當前系統有多少線上人數。
  5. 一些常用的資料快取:比如我們的BBS論壇,板塊不會經常變化的,但是每次訪問首頁都要從mysql中獲取,可以在redis中快取起來,不用每次請求資料庫。
  6. 把前200篇文章快取或者評論快取:一般使用者瀏覽網站,只會瀏覽前面一部分文章或者評論,那麼可以把前面200篇文章和對應的評論快取起來。使用者訪問超過的,就訪問資料庫,並且以後文章超過200篇,則把之前的文章刪除。
  7. 好友關係:微博的好友關係使用redis實現。
  8. 釋出和訂閱功能:可以用來做聊天軟體。

redismemcached
的比較:

  memcached redis
型別 純記憶體資料庫 記憶體磁碟同步資料庫
資料型別 在定義value時就要固定資料型別 不需要
虛擬記憶體 不支援 支援
過期策略 支援 支援
儲存資料安全 不支援 可以將資料同步到dump.db中
災難恢復 不支援 可以將磁碟中的資料恢復到記憶體中
分散式 支援 主從同步
訂閱與釋出 不支援 支援

redisubuntu系統中的安裝與啟動

  1. 安裝:
     sudo apt-get install redis-server
    
  2. 解除安裝:
     sudo apt-get purge --auto-remove redis-server
    
  3. 啟動:redis安裝後,預設會自動啟動,可以通過以下命令檢視:

     ps aux|grep redis
    

    如果想自己手動啟動,可以通過以下命令進行啟動:

     sudo service redis-server start
    
  4. 停止:

     sudo service redis-server stop
    

redis在windows系統中的安裝與啟動:

  1. 下載:redis官方是不支援windows作業系統的。但是微軟的開源部門將redis移植到了windows上。因此下載地址不是在redis官網上。而是在github上:https://github.com/MicrosoftArchive/redis/releases。
  2. 安裝:點選一頓下一步安裝就可以了。
  3. 執行:進入到redis安裝所在的路徑然後執行redis-server.exe redis.windows.conf就可以運行了。
  4. 連線:redismysql以及mongo是一樣的,都提供了一個客戶端進行連線。輸入命令redis-cli(前提是redis安裝路徑已經加入到環境變數中了)就可以連線到redis伺服器了。

其他機器訪問本機redis伺服器:

想要讓其他機器訪問本機的redis伺服器。那麼要修改redis.conf的配置檔案,將bind改成bind [自己的ip地址或者0.0.0.0],其他機器才能訪問。
注意:bind繫結的是本機網絡卡的ip地址,而不是想讓其他機器連線的ip地址。如果有多塊網絡卡,那麼可以繫結多個網絡卡的ip地址。如果繫結到額是0.0.0.0,那麼意味著其他機器可以通過本機所有的ip地址進行訪問。

redis的操作

redis的操作可以用兩種方式,第一種方式採用redis-cli,第二種方式採用程式語言,比如PythonPHPJAVA等。

  1. 使用redis-cliredis進行字串操作:

  2. 啟動redis

      sudo service redis-server start
    
  3. 連線上redis-server
      redis-cli -h [ip] -p [埠]
    
  4. 新增:

      set key value
      如:
      set username xiaotuo
    

    將字串值value關聯到key。如果key已經持有其他值,set命令就覆寫舊值,無視其型別。並且預設的過期時間是永久,即永遠不會過期。

  5. 刪除:

      del key
      如:
      del username
    
  6. 設定過期時間:

      expire key timeout(單位為秒)
    

    也可以在設定值的時候,一同指定過期時間:

      set key value EX timeout
      或:
      setex key timeout value
    
  7. 檢視過期時間:

      ttl key
      如:
      ttl username
    
  8. 檢視當前redis中的所有key

      keys *
    
  9. 列表操作:

    • 在列表左邊新增元素:

        lpush key value
      

      將值value插入到列表key的表頭。如果key不存在,一個空列表會被建立並執行lpush操作。當key存在但不是列表型別時,將返回一個錯誤。

    • 在列表右邊新增元素:

        rpush key value
      

      將值value插入到列表key的表尾。如果key不存在,一個空列表會被建立並執行RPUSH操作。當key存在但不是列表型別時,返回一個錯誤。

    • 檢視列表中的元素:

        lrange key start stop
      

      返回列表key中指定區間內的元素,區間以偏移量startstop指定,如果要左邊的第一個到最後的一個lrange key 0 -1

    • 移除列表中的元素:

      • 移除並返回列表key的頭元素:
          lpop key
        
      • 移除並返回列表的尾元素:
        rpop key
        
      • 移除並返回列表key的中間元素:

          lrem key count value
        

        將刪除key這個列表中,count個值為value的元素。

    • 指定返回第幾個元素:

        lindex key index
      

      將返回key這個列表中,索引為index的這個元素。

    • 獲取列表中的元素個數:

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

        lrem key count value
        如:
        lrem languages 0 php
      

      根據引數 count 的值,移除列表中與引數 value 相等的元素。count的值可以是以下幾種:

      • count > 0:從表頭開始向表尾搜尋,移除與value相等的元素,數量為count
      • count < 0:從表尾開始向表頭搜尋,移除與 value相等的元素,數量為count的絕對值。
      • count = 0:移除表中所有與value 相等的值。
  10. set集合的操作:

    • 新增元素:
        sadd set value1 value2....
        如:
        sadd team xiaotuo datuo
      
    • 檢視元素:
        smembers set
        如:
        smembers team
      
    • 移除元素:
        srem set member...
        如:
        srem team xiaotuo datuo
      
    • 檢視集合中的元素個數:
        scard set
        如:
        scard team1
      
    • 獲取多個集合的交集:
        sinter set1 set2
        如:
        sinter team1 team2
      
    • 獲取多個集合的並集:
        sunion set1 set2
        如:
        sunion team1 team2
      
    • 獲取多個集合的差集:
      sdiff set1 set2
      如:
      sdiff team1 team2
      
  11. hash雜湊操作:

    • 新增一個新值:

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

      將雜湊表key中的域field的值設為value
      如果key不存在,一個新的雜湊表被建立並進行 HSET操作。如果域 field已經存在於雜湊表中,舊值將被覆蓋。

    • 獲取雜湊中的field對應的值:

        hget key field
        如:
        hget website baidu
      
    • 刪除field中的某個field

        hdel key field
        如:
        hdel website baidu
      
    • 獲取某個雜湊中所有的fieldvalue

        hgetall key
        如:
        hgetall website
      
    • 獲取某個雜湊中所有的field

        hkeys key
        如:
        hkeys website
      
    • 獲取某個雜湊中所有的值:

      hvals key
      如:
      hvals website
      
    • 判斷雜湊中是否存在某個field

      hexists key field
      如:
      hexists website baidu
      
    • 獲取雜湊中總共的鍵值對:

      hlen field
      如:
      hlen website
      
  12. 事務操作:Redis事務可以一次執行多個命令,事務具有以下特徵:

    • 隔離操作:事務中的所有命令都會序列化、按順序地執行,不會被其他命令打擾。
    • 原子操作:事務中的命令要麼全部被執行,要麼全部都不執行。
    • 開啟一個事務:

        multi
      

      以後執行的所有命令,都在這個事務中執行的。

    • 執行事務:

        exec
      

      會將在multiexec中的操作一併提交。

    • 取消事務:

        discard
      

      會將multi後的所有命令取消。

    • 監視一個或者多個key

        watch key...
      

      監視一個(或多個)key,如果在事務執行之前這個(或這些) key被其他命令所改動,那麼事務將被打斷。

    • 取消所有key的監視:

        unwatch
      
  13. 釋出/訂閱操作:

    • 給某個頻道釋出訊息:
        publish channel message
      
    • 訂閱某個頻道的訊息:
        subscribe channel