Python網絡爬蟲(二十三)——Redis

概述

redis 是一種支持分佈式的非關係型數據庫,數據是保存在內存中,同時 redis 可以定時把內存數據同步到磁盤,即可以將數據持久化,並且 Redis 比 memcached 支持更多的數據結構。

redis 和 memcached

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

redis 在 ubuntu 系統中的安裝與啓動

  • 安裝:
 sudo apt-get install redis-server
  •  卸載:
 sudo apt-get purge --auto-remove redis-server
  • 啓動:redis 安裝後,默認會自動啓動,可以通過以下命令查看:
 ps aux|grep redis
  • 可以通過以下命令進行手動啓動:
 sudo service redis-server start
  • 停止:
 sudo service redis-server stop

redis 在 windows 系統中的安裝與啓動

  • 下載:redis 官方是不支持 windows。而微軟的開源部門將 redis 移植到了 windows 上。下載地址爲 github 
  • 安裝
  • 運行:終端定位到 Redis 的安裝目錄,
redis-server.exe redis.windows.conf
  • 連接:redis 和 mysql 以及 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,第二種方式採用編程語言,比如 Python、PHP 和 JAVA 等。

  • 啓動 redis:
  sudo service redis-server start
  • 連接上 redis-server:
  redis-cli -h [ip] -p [端口]
  • 添加:
  set key value
  如:
  set username xiaotuo

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

  • 刪除:

del key
  • 設置過期時間:

  expire key timeout(單位爲秒)

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

set key value EX timeout
  • 查看過期時間:

ttl key
  • 查看當前 redis 中的所有 key:

  keys *

列表操作:

  • 在列表左邊添加元素:
  lpush key value

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

  • 在列表右邊添加元素:
  rpush key value

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

  • 查看列表中的元素:

  lrange key start stop

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

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

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

  lrem key count value

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

  • 指定返回第幾個元素:

  lindex key index

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

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

      llen key
    
  • 刪除指定的元素:

      lrem key count value
    

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

    • count > 0:從表頭開始向表尾搜索,移除與 value 相等的元素,數量爲 count
    • count < 0:從表尾開始向表頭搜索,移除與 value 相等的元素,數量爲 count 的絕對值
    • count = 0:移除表中所有與 value 相等的值。

set 集合操作

  • 添加元素:
  sadd set value1 value2....
  • 查看元素:
  smembers set
  • 移除元素:
  srem set member...
  • 查看集合中的元素個數:
  scard set
  • 獲取多個集合的交集:
  sinter set1 set2
  • 獲取多個集合的並集:
  sunion set1 set2
  • 獲取多個集合的差集:
sdiff set1 set2

hash 哈希操作

  • 添加一個新值:

  hset key field value

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

  • 獲取哈希中的 field 對應的值:

  hget key field
  • 刪除 field 中的某個 field:

  hdel key field
  • 獲取某個哈希中所有的 field 和 value:

  hgetall key
  • 獲取某個哈希中所有的 field:

  hkeys key
  • 獲取某個哈希中所有的值:

hvals key
  • 判斷哈希中是否存在某個 field:

hexists key field
  • 獲取哈希中總共的鍵值對:

hlen field

事務操作

  • Redis 事務可以一次執行多個命令,事務具有以下特徵:

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

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

  • 執行事務:

  exec

會將在 multi 和 exec 中的操作一併提交。

  • 取消事務:

  discard

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

  • 監視一個或者多個 key:

  watch key...

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

  • 取消所有 key 的監視

  unwatch

發佈/訂閱操作:

  • 給某個頻道發佈消息:
  publish channel message
  • 訂閱某個頻道的消息:
  subscribe channel
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章