雖然前面兩篇已經說了redis的一些配置安裝什麼的,篇幅有點長,可能看完了也不知道怎麼操作,這裡再濃縮一下: 什麼是redis redis完全開源免費的,遵守BSD協議,是一個高性能的非關係型key-value資料庫, redis特點: redis支持數據的持久化,可以將記憶體中的數據保存在磁碟中... ...
雖然前面兩篇已經說了redis的一些配置安裝什麼的,篇幅有點長,可能看完了也不知道怎麼操作,這裡再濃縮一下:
什麼是redis
redis完全開源免費的,遵守BSD協議,是一個高性能的非關係型key-value資料庫,
redis特點:
- redis支持數據的持久化,可以將記憶體中的數據保存在磁碟中,重啟的時候可以再次載入進行使用,相比memcache,redis可以持久化存儲,這是memcache沒有的。
- redis支持五種數據類型。
- redis支持資料庫備份。
redis優勢:
- redis性能極高,讀的速度是110000次/s,寫的速度是81000次/s。
- redis支持數據類型:String,Lists,Hashes,Sets以及Ordered Sets。
- redis的所有操作都是原子性的,多個操作支持事物,即MULTI和EXEC指令包起來,但是多個事物來說不是原子性的,mysql的多個事物是原子性的。
- redis支持publish/subscribe,通知,key過期等等特性。
redis 配置
可以通過redis-cli 進入交互模式,使用config命令查看或設置配置項。也可以進入配置文件用vim編輯器進行修改
redis簡單使用
啟動服務端:
啟動客戶端,keys * 查看當前資料庫里存儲的key-value
查看數據:lrange key名 0 -1
Python操作redis
安裝redis庫
連接redis,基本操作
先看redis的源碼,實例化Redis對象時,提供了以下的參數
連接並添加數據
連接時根據當前的開發環境來設置參數,我這裡的是127.0.0.1,埠就是6379,密碼為空,由上面的源碼得知,Redis預設就是這些參數,所以我只設置host就行了。自行根據自己的開發環境設置參數
set方法是兩個參數,分別是key-value,hset是三個參數,第一個是資料庫的key值,第二個和第三個是字典的key和value
在運行之前資料庫的數據有這些:
運行,然後在終端查看:
查詢,利用get和hget獲取值
發現值是bytes格式,在連接的時候可以加個參數讓取出來的值都是字元串:decode_responses=True
剛纔的hset是可以再value那一層加個字典,如果還想套一層,可以用hmset:
取值,用hmget取出來是一個列表形式,內容時改字典的value值,hgetall就是全部拿出來了
redis連接池
使用connectionpool來管理對一個redis server的所有連接,避免每次建立、釋放連接的資源開銷。預設,每個Redis實例都會維護一個自己的連接池。可以直接建立一個連接池,然後作為參數傳給Redis實例,這樣就可以實現多個Redis實例共用一個連接池
如下,後面的操作其實都是一樣的了
當然你可以用max_connections設置最大連接數:
發佈者訂閱者模型
發佈者:
訂閱者:
先啟動多個訂閱者:
啟動發佈者:
訂閱者返回結果:
三個sub訂閱者返回的結果都是如下:
那麼這parse_response到底是什麼呢,列印看看,在未接受到數據之前,它預設是1,接收到數據之後就是接收的數據
有沒有發現其實比mysql還簡單很多
常用方法:
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) 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的預設分片個數 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還有支持django的資料庫模塊,pip install django-redis即可