qhfl-5 redis 简单操作
Redis
Redis是完全開源免費的,遵守BSD協(xié)議,是一個高性能的key-value數(shù)據(jù)庫。
Redis有以下特點:
-- Redis支持數(shù)據(jù)的持久化,可以將內存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進行使用。
-- Redis支持五種數(shù)據(jù)類型。
-- Redis支持數(shù)據(jù)庫備份。
Redis的優(yōu)勢:
-- Redis性能極高,讀的速度是110000次/s,寫的速度是81000次/s。
-- Redis豐富的數(shù)據(jù)類型,String,Lists,Hashes,Sets以及Ordered Sets。
-- Redis的所有操作都是原子性的,意思就是要么成功執(zhí)行,要么完全失敗不執(zhí)行,多個操作支持事物。即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 數(shù)據(jù)類型
-- String 字符串-- redis的string可以包含任何數(shù)據(jù),包括圖片以及序列化的對象,一個鍵最大能存儲512MB。-- Hash 哈希-- redis的hash是一個String類型的key和value的映射表,hash特別適合存儲對象,類比python字典。-- List 列表-- redis的list是簡單的字符串列表,按照插入順序排序,可以從兩端進行添加,類似于雙向鏈表,列表還可以進行阻塞。-- Set 集合-- redis的set是字符串類型的無序且不重復集合。集合是通過哈希表實現(xiàn)的,所以添加,刪除,查找的時間復雜度都是O(1)。-- Zset 有序集合-- redis的zset和set一樣,不同的是每個元素都會關聯(lián)一個double類型的分數(shù),redis正是通過對分數(shù)的排序對集合進行有序存儲。Python 操作Redis
-- 下載? pip install redis
-- 連接
Redis提供兩個類Redis和StrictRedis用于實現(xiàn)Redis的命令,StrictRedis用于實現(xiàn)大部分官方的命令,并使用官方的語法和命令,
Redis是StrictRedis的子類,用于向后兼容舊版本的redis-py。
Redis連接實例是線程安全的,可以直接將redis連接實例設置為一個全局變量,直接使用。
如果需要另一個Redis實例(or Redis數(shù)據(jù)庫)時,就需要重新創(chuàng)建redis連接實例來獲取一個新的連接
連接redis,加上decode_responses=True,寫入的鍵值對中的value為str類型,不加這個參數(shù)寫入的則為字節(jié)類型。
redis 簡單設置值
import redisconn = 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中設置值,默認,不存在則創(chuàng)建,存在則修改參數(shù):ex,過期時間(秒)過期后值Nonepx,過期時間(毫秒)nx,如果設置為True,則只有name不存在時,當前set操作才執(zhí)行xx,如果設置為True,則只有name存在時,當前set操作才執(zhí)行注:ex,px,nx,xx可以跟在命令后面 eg: setnx 表示只能創(chuàng)建 hash命令一樣適用get(key) 獲取key的值mset(*args, **kwargs) 批量設置值mget(key, *args).....請走入官方文檔.....Redis命令之String Redis的命令 String hset(name, key, value) 增加單個 不存在則創(chuàng)建hget(name, key) 獲取單個hmset(name, mapping) 批量增加 mapping為字典hgetall(name) 獲取name對應hash的所有鍵值hlen(name) 獲取name對應的hash中鍵值對的個數(shù)hkeys(name) 獲取name對應的hash中所有的key的值hvals(name) 獲取name對應的hash中所有的value的值hexists(name, key) 檢查name對應的hash是否存在當前傳入的keyhdel(name,*keys) 將name對應的hash中指定key的鍵值對刪除hscan_iter(name, match=None, count=None)利用yield封裝hscan創(chuàng)建生成器,實現(xiàn)分批去redis中獲取數(shù)據(jù)參數(shù):match,匹配指定key,默認None 表示所有的keycount,每次分片最少獲取個數(shù),默認None表示采用Redis的默認分片個數(shù)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對應的列表的某一個值前或后插入一個新值參數(shù):name,redis的namewhere,BEFORE或AFTERrefvalue,標桿值,即:在它前后插入數(shù)據(jù)value,要插入的數(shù)據(jù) lset(name, index, value) 給指定索引修改值lrem(name, value, num)在name對應的list中刪除指定的值參數(shù):name,redis的namevalue,要刪除的值num, num=0,刪除列表中所有的指定值;num=2,從前到后,刪除2個; num=1,從前到后,刪除左邊第1個num=-2,從后向前,刪除2個lindex(name, index) 在name對應的列表中根據(jù)索引獲取列表元素Redis命令之List listPython Redis 連接池
使用connection pool來管理對一個redis server的所有連接,避免每次建立、釋放連接的開銷。
默認,每個Redis實例都會維護一個自己的連接池。可以直接建立一個連接池,
然后作為參數(shù)傳給Redis實例,這樣就可以實現(xiàn)多個Redis實例共享一個連接池。
import redis# 保持跟數(shù)據(jù)庫的鏈接,當超過數(shù)量時,就等著 # # 解碼,打印出來不再是b'xx' 最大鏈接數(shù) 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發(fā)布訂閱者模型
啟動監(jiān)聽
import redis conn = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True)# 第一步 生成一個訂閱者對象 pubsub = conn.pubsub() # 第二步 訂閱一個消息 pubsub.subscribe("lewen") # 創(chuàng)建一個接收 while True:print("working~~~")msg = pubsub.parse_response()print(msg) # 默認值是1# 只要訂閱的內容發(fā)布改變,就會更新所有?發(fā)布內容
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 的文檔 以及源碼里看封裝的一些方法
總結
以上是生活随笔為你收集整理的qhfl-5 redis 简单操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qhfl-4 注册-登录-认证
- 下一篇: qhfl-6 购物车