Redis 以及 Python操做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指令包起來。post

    -- 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的命令 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的鍵值對刪除

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對應的列表中根據索引獲取列表元素

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

Django Redis

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

相關文章
相關標籤/搜索