Scrapy-redis分布式組件之redis數(shù)據(jù)庫

概述

redis是一種支持分布式的nosql數(shù)據(jù)庫,他的數(shù)據(jù)是保存在內(nèi)存中,同時redis可以定時把內(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使用場景:

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

redismemcached的比較:

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

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

  1. 下載:redis官方是不支持windows操作系統(tǒng)的。但是微軟的開源部門將redis移植到了windows上。因此下載地址不是在redis官網(wǎng)上。而是在github上:https://github.com/MicrosoftArchive/redis/releases
    官方下載
  1. 安裝:點(diǎn)擊一頓下一步安裝就可以了。
  2. 運(yùn)行:進(jìn)入到redis安裝所在的路徑然后執(zhí)行redis-server.exe redis.windows.conf就可以運(yùn)行了。
1

如果出現(xiàn) bind: no error 則需要輸入以下命令

redis-cli.exe
shutdown #可不寫
exit  #退出
2
  1. 連接:redismysql以及mongo是一樣的,都提供了一個客戶端進(jìn)行連接。輸入命令redis-cli(前提是redis安裝路徑已經(jīng)加入到環(huán)境變量中了)就可以連接到redis服務(wù)器了。

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

  1. 安裝(先獲取root權(quán)限):


    獲取root權(quán)限在安裝redis
sudo apt-get install redis-server
  1. 卸載:
sudo apt-get purge --auto-remove redis-server
  1. 啟動:redis安裝后,默認(rèn)會自動啟動,可以通過以下命令查看:
ps aux|grep redis

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

sudo service redis-server start
  1. 停止:
sudo service redis-server stop

其他機(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)卡,那么可以綁定多個網(wǎng)卡的ip地址。如果綁定到額是0.0.0.0,那么意味著其他機(jī)器可以通過本機(jī)所有的ip地址進(jìn)行訪問。

1、修改redis.conf的配置文件


修改redis.conf的配置文件

2、啟動本機(jī)redis服務(wù)器


啟動本機(jī)redis服務(wù)器

3、在Ubuntu虛擬機(jī)(基于Linux內(nèi)核)啟動redis服務(wù)器并連接到本地redis服務(wù)器


在Ubuntu虛擬機(jī)(基于Linux內(nèi)核)啟動redis服務(wù)器并連接到本地redis服務(wù)器
添加后查詢成功圖

redis的操作

redis的操作可以用兩種方式,第一種方式采用redis-cli,第二種方式采用編程語言,比如Python、PHPJAVA等。

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

  2. 啟動redis

      sudo service redis-server start
    
  3. 連接上redis-server

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

      set key value
      如:
      set username xiaotuo
    
    

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

  5. 刪除:

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

      expire key timeout(單位為秒)
    
    

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

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

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

      keys *
    
  9. 列表操作:

    • 在列表左邊添加元素:

        lpush key value
      

      將值value插入到列表key的表頭。如果key不存在,一個空列表會被創(chuàng)建并執(zhí)行lpush操作。當(dāng)key存在但不是列表類型時,將返回一個錯誤。

    • 在列表右邊添加元素:

        rpush key value
      

      將值value插入到列表key的表尾。如果key不存在,一個空列表會被創(chuàng)建并執(zhí)行RPUSH操作。當(dāng)key存在但不是列表類型時,返回一個錯誤。

    • 查看列表中的元素:

        lrange key start stop
      

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

    • 移除列表中的元素:

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

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

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

          lrem key count value
        

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

    • 指定返回第幾個元素:

        lindex key index
      

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

    • 獲取列表中的元素個數(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的絕對值。
      • count = 0:移除表中所有與value 相等的值。
  10. set集合的操作:

    • 添加元素:
      sadd set value1 value2....
      如:
      sadd team xiaotuo datuo
    
    • 查看元素:
      smembers set
      如:
      smembers team
    
    • 移除元素:
      srem set member...
      如:
      srem team xiaotuo datuo
    
    • 查看集合中的元素個數(shù):
      scard set
      如:
      scard team1
    
    • 獲取多個集合的交集:
      sinter set1 set2
      如:
      sinter team1 team2
    
    • 獲取多個集合的并集:
      sunion set1 set2
      如:
      sunion team1 team2
    
    • 獲取多個集合的差集:
    sdiff set1 set2
    如:
    sdiff team1 team2
    
  11. list列表和set集合的區(qū)別:
    1.第一點(diǎn)不同:列表元素順序是有序的,集合元素順序是無序

  1. hash哈希操作:

    • 添加一個新值:
      hset key field value
      如:
      hset website baidu baidu.com
    

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

    • 獲取哈希中的field對應(yīng)的值:
      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
    
  2. 事務(wù)操作:Redis事務(wù)可以一次執(zhí)行多個命令,事務(wù)具有以下特征:

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

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

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

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

    • 取消事務(wù):
      discard
    
    

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

    • 監(jiān)視一個或者多個key
      watch key...
    
    

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

    • 取消所有key的監(jiān)視:
      unwatch
    
  3. 發(fā)布/訂閱操作:

    • 給某個頻道發(fā)布消息:
      publish channel message
    
    • 訂閱某個頻道的消息:
      subscribe channel
    

上一篇:Scrapy爬蟲框架之CrawlSpider爬蟲
下一篇:Scrapy爬蟲框架之Request和Response(請求和響應(yīng))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容