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 的文檔 以及源碼裏看封裝的一些方法