qhfl-5 redis 簡單操做

Redis

  Redis是徹底開源免費的,遵照BSD協議,是一個高性能的key-value數據庫。python

  Redis有如下特色:redis

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

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

    -- Redis支持數據庫備份。vim

  Redis的優點:安全

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

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

    -- Redis的全部操做都是原子性的,意思就是要麼成功執行,要麼徹底失敗不執行,多個操做支持事物。即MULTI和EXEC指令包起來。ide

    -- 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類型,不加這個參數寫入的則爲字節類型。

 

redis 簡單設置值

import redis

conn = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True)

# conn.set("n1", "v1")
# conn.hset("n2", "k2", "v2")  # 設置字典  redis = {n2: {k2: v2}}

# ret1 = conn.get("n1")
# ret2 = conn.hget("n2", "k2") 
# print(ret1)
# print(ret2)


conn.hmset("n3", {"k3": "v3", "k4": "v4"})  # 設置多個值

# ret3 = conn.hget("n3", "k3")
# ret4 = conn.hget("n3", "k4")
# ret5 = conn.hgetall("n3")              # 獲取全部值
# ret6 = conn.get("xxxx")
# print(ret6)

# print(ret3)
# print(ret4)
# print(ret5)
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的命令 String

 

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
hash

 

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
list

Python Redis 鏈接池

  使用connection pool來管理對一個redis server的全部鏈接,避免每次創建、釋放鏈接的開銷。

  默認,每一個Redis實例都會維護一個本身的鏈接池。能夠直接創建一個鏈接池,

  而後做爲參數傳給Redis實例,這樣就能夠實現多個Redis實例共享一個鏈接池。

import redis

# 保持跟數據庫的連接,當超過數量時,就等着
#                                                         # 解碼,打印出來再也不是b'xx'    最大連接數
pool = redis.ConnectionPool(host="127.0.0.1", port=6379, decode_responses=True, max_connections=10)

conn = redis.Redis(connection_pool=pool)

ret = conn.get("n1")
print(ret)

redis發佈訂閱者模型

啓動監聽

import redis
conn = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True)

# 第一步 生成一個訂閱者對象
pubsub = conn.pubsub()
# 第二步 訂閱一個消息
pubsub.subscribe("lewen")
# 建立一個接收
while True:
    print("working~~~")
    msg = pubsub.parse_response()
    print(msg)  # 默認值是1

# 只要訂閱的內容發佈改變,就會更新全部

 發佈內容

import redis
conn = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True)
conn.publish("lewen", "cq")

 

 

 

Django Redis

  pip install django-redis

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

相關文章
相關標籤/搜索