Redis 以及 Python操作Redis


Redis

  Redis是完全開源免費的,遵守BSD協議,是一個高性能的key-value數據庫。

  Redis有以下特點:

    -- Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。

    -- Redis支持五種數據類型。

    -- Redis支持數據庫備份。

  Redis的優勢:

    -- Redis性能極高,讀的速度是110000次/s,寫的速度是81000次/s。

    -- Redis豐富的數據類型,String,Lists,Hashes,Sets以及Ordered Sets。

    -- Redis的所有操作都是原子性的,意思就是要么成功執行,要么完全失敗不執行,多個操作支持事物。即MULTI和EXEC指令包起來。

    -- Redis有豐富的特性,支持publish/subscribe,通知,key過期等等特性。

  Redis 配置

    -- 可以通過redis-cli 進入交互模式,使用config命令查看或設置配置項。也可以進入配置文件用vim編輯器進行修改。

# 獲取所有配置項
reids 127.0.0.1:6379> config get *
# 獲取單個配置項
redis 127.0.0.1:6379> config get loglevel
# 編輯配置
redis 127.0.0.1:6379> config set loglevel "notice"

  Redis 數據類型

    -- String 字符串 

      -- redis的string可以包含任何數據,包括圖片以及序列化的對象,一個鍵最大能存儲512MB。

    -- Hash 哈希

      -- redis的hash是一個String類型的key和value的映射表,hash特別適合存儲對象,類比python字典。

    -- List 列表

      -- redis的list是簡單的字符串列表,按照插入順序排序,可以從兩端進行添加,類似於雙向鏈表,列表還可以進行阻塞。

      -- Set 集合

      -- redis的set是字符串類型的無序且不重復集合。集合是通過哈希表實現的,所以添加,刪除,查找的時間復雜度都是O(1)。

    -- Zset 有序集合

      -- redis的zset和set一樣,不同的是每個元素都會關聯一個double類型的分數,redis正是通過對分數的排序對集合進行有序存儲。

Python 操作Redis

  -- 下載  pip install redis

  -- 連接

    Redis提供兩個類Redis和StrictRedis用於實現Redis的命令,StrictRedis用於實現大部分官方的命令,並使用官方的語法和命令,

    Redis是StrictRedis的子類,用於向后兼容舊版本的redis-py。

    Redis連接實例是線程安全的,可以直接將redis連接實例設置為一個全局變量,直接使用。

    如果需要另一個Redis實例(or Redis數據庫)時,就需要重新創建redis連接實例來獲取一個新的連接

    連接redis,加上decode_responses=True,寫入的鍵值對中的value為str類型,不加這個參數寫入的則為字節類型。

import redis

res = redis.Redis(host="localhost", port=6379, password="", decode_responses=True)
res.set("gaoxin", 18)
print(type(res.get("gaoxin"))) # <class 'str'>

Python Redis 連接池

  使用connection pool來管理對一個redis server的所有連接,避免每次建立、釋放連接的開銷。

  默認,每個Redis實例都會維護一個自己的連接池。可以直接建立一個連接池,

  然后作為參數傳給Redis實例,這樣就可以實現多個Redis實例共享一個連接池。

pool = redis.ConnectionPool(host="localhost", port=6379, password="", decode_responses=True)
res = redis.Redis(connection_pool=pool)
res.set("haha", 18)
print(res.get("haha"))

Redis的基本命令

Redis的命令 String

  set(name, value, ex=None, px=None, nx=False, xx=False)

  在Redis中設置值,默認,不存在則創建,存在則修改
    參數:
    ex,過期時間(秒)過期后值None
    px,過期時間(毫秒)
    nx,如果設置為True,則只有name不存在時,當前set操作才執行
    xx,如果設置為True,則只有name存在時,當前set操作才執行

    注:ex,px,nx,xx可以跟在命令后面 eg: setnx 表示只能創建 hash命令一樣適用

  get(key)  獲取key的值

  mset(*args, **kwargs)  批量設置值

  mget(key, *args)

  .....請走入官方文檔.....
Redis命令之String

Redis的命令 hash

hset(name, key, value)  增加單個 不存在則創建

  hget(name, key)  獲取單個

  hmset(name, mapping)  批量增加 mapping為字典

  hgetall(name) 獲取name對應hash的所有鍵值

  hlen(name)  獲取name對應的hash中鍵值對的個數

  hkeys(name)  獲取name對應的hash中所有的key的值

  hvals(name)  獲取name對應的hash中所有的value的值

  hexists(name, key)  檢查name對應的hash是否存在當前傳入的key

  hdel(name,*keys)   將name對應的hash中指定key的鍵值對刪除

  hscan_iter(name, match=None, count=None)
    利用yield封裝hscan創建生成器,實現分批去redis中獲取數據
    參數:
    match,匹配指定key,默認None 表示所有的key
    count,每次分片最少獲取個數,默認None表示采用Redis的默認分片個數
Redis命令之Hash

Redis的命令 list

lpush(name,values)  在name對應的list中左邊添加元素 沒有就新建

  llen(name) 獲取name對應的列表長度

  lrang(name, index1, index2) 按照index切片取出name對應列表里值

  lpushx(name, value)  只能添加不能新建

  linsert(name, where, refvalue, value))  

    在name對應的列表的某一個值前或后插入一個新值
    參數:
    name,redis的name
    where,BEFORE或AFTER
    refvalue,標桿值,即:在它前后插入數據
    value,要插入的數據 

  lset(name, index, value)  給指定索引修改值

  lrem(name, value, num)

    在name對應的list中刪除指定的值
    參數:
    name,redis的name
    value,要刪除的值
    num, num=0,刪除列表中所有的指定值;
    num=2,從前到后,刪除2個; num=1,從前到后,刪除左邊第1個
    num=-2,從后向前,刪除2個

  lindex(name, index)  在name對應的列表中根據索引獲取列表元素
Redis命令之List  

剩下的集合以及有序集合的命令 請移步官方文檔~~~~

redis的發布訂閱者模式

redis的發布和訂閱者模式就像是廣播發消息是一樣的,我們來測試下發布以及訂閱者模式~

# by gaoxin
import redis

r = redis.Redis(host="127.0.0.1", password="", decode_responses=True)

# 第一步 生成一個訂閱者對象
pubsub = r.pubsub()
# 第二步 訂閱一個消息 實際上就是監聽這個鍵
pubsub.subscribe("gaoxin")

# 第三步 死循環一直等待監聽結果
while True:
    print("working~~~")
    msg = pubsub.parse_response()
    print(msg)
redis訂閱者
# by gaoxin
import redis

r = redis.Redis(host="127.0.0.1", password="", decode_responses=True)

r.publish("gaoxin", "hahaha")
redis發布者

Django Redis

  pip install django-redis

  參考django-redis 的文檔 以及源碼里看封裝的一些方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM