Redis数据操作和与Python交互
Redis數據操作和與Python交互
文章目錄
- Redis數據操作和與Python交互
- 一、數據結構
- 1.String 字符串類型
- 2.Hash (哈希)
- 3.列表
- 4.Set 集合
- 5.zset 有序集合
- 6.鍵命令
- 二、Redis與Python交互
- 1.虛擬環境中安裝redis
- 2.調?模塊
- 3.StrictRedis對象?法
- 4.django存儲session
一、數據結構
- redis是key-value的數據結構,每條數據都是?個鍵值對
- 鍵的類型是字符串
注意:鍵不能重復
- 值的類型分為五種:
- 字符串string
- 哈希hash
- 列表list
- 集合set
- 有序集合zset
- 數據操作行為
- 保存
- 修改
- 獲取
- 刪除
1.String 字符串類型
- 是redis中最基本的數據類型,一個key對應一個value。
- String類型是二進制安全的,意思是 redis 的 string可以包含任何數據。如數字,字符串,jpg圖片或者序列化的對象。
string類型:主要存儲字符串
| 設置鍵值 | set key value |
| 設置鍵值與過期時間 | setex key seconds(單位為秒) value |
| 設置多個鍵 | met key1 value1 key2 value2 … |
| 追加值 | append key value |
| 獲取值 | get key |
| 獲取多個 鍵的值 | mget key1 key2 … |
- 實戰場景:
- 1.緩存: 經典使用場景,把常用信息,字符串,圖片或者視頻等信息放到redis中,redis作為緩存層,mysql做持久化層,降低mysql的讀寫壓力。
- 2**.計數器:redis是單線程模型,一個命令執行完才會執行下一個,同時數據可以一步落地到其他的數據源。**
- 3.session:常見方案spring session + redis實現session共享,
2.Hash (哈希)
- 是一個Mapmap,指值本身又是一種鍵值對結構
hash類型:主要用于存儲對象,對象的結構為屬性和值
| 設置單個屬性 | hset key field value (例:hset user name xiaoming) |
| 設置多個屬性 | hmset key fiel1 value1 field2 value2… |
| 獲取指定鍵所有屬性 | hkeys key |
| 獲取一個屬性的值 | hget key field |
| 獲取多個屬性的值 | hmget key field1 field2… |
| 獲取所有屬性的值 | hvals key |
| 刪除屬性 | hdel key field1 field2… |
使用:所有hash的命令都是 h 開頭的 hget 、hset 、 hdel 等
127.0.0.1:6379> hset user name1 hao (integer) 1 127.0.0.1:6379> hset user email1 hao@163.com (integer) 1 127.0.0.1:6379> hgetall user 1) "name1" 2) "hao" 3) "email1" 4) "hao@163.com" 127.0.0.1:6379> hget user user (nil) 127.0.0.1:6379> hget user name1 "hao" 127.0.0.1:6379> hset user name2 xiaohao (integer) 1 127.0.0.1:6379> hset user email2 xiaohao@163.com (integer) 1 127.0.0.1:6379> hgetall user 1) "name1" 2) "hao" 3) "email1" 4) "hao@163.com" 5) "name2" 6) "xiaohao" 7) "email2" 8) "xiaohao@163.com"- 實戰場景:
- 1.緩存: 能直觀,相比string更節省空間,的維護緩存信息,如用戶信息,視頻信息等。
3.列表
- List 說白了就是鏈表(redis 使用雙端鏈表實現的List),是有序的,value可以重復,可以通過下標取出對應的value值,左右兩邊都能進行插入和刪除數據。
使用列表的技巧
lpush+lpop=Stack(棧)
lpush+rpop=Queue(隊列)
lpush+ltrim=Capped Collection(有限集合)
lpush+brpop=Message Queue(消息隊列)
list類型:存儲列表
| 在左側插入數據 | lpush key value1 value2… |
| 在右側插入數據 | rpush key value1 value2… |
| 在指定元素前插入 | linsert key before 元素 插入元素 |
| 在指定元素后插入 | linsert key after 元素 插入元素 |
| 獲取指定范圍值 | lrange key start stop(支持負索引) |
| 設置指定索引位置的值(修改) | lset key index value |
| 刪除指定元素 | lrem key count value (count>0表示從頭到尾刪除的次數,count=0刪除所有,count<0表示從尾到頭刪除的次數) |
- 使用:
- 實戰場景:
- 1.timeline:例如微博的時間軸,有人發布微博,用lpush加入時間軸,展示新的列表信息。
4.Set 集合
- 集合類型也是用來保存多個字符串的元素
- 但和列表不同的是:
- 集合中 1. 不允許有重復的元素,2.集合中的元素是無序的,不能通過索引下標獲取元素,3.支持集合間的操作,可以取多個集合取交集、并集、差集。
使用:命令都是以s開頭的 sset 、srem、scard、smembers、sismember
set類型:存儲無序集合
| 添加元素 | sadd key member1 member2… |
| 獲取所有元素 | smembers key |
| 刪除指定元素 | srem key |
- 實戰場景;
- 1.標簽(tag),給用戶添加標簽,或者用戶給消息添加標簽,這樣有同一標簽或者類似標簽的可以給推薦關注的事或者關注的人。
- 2.點贊,或點踩,收藏等,可以放到set中實現
5.zset 有序集合
- 有序集合和集合有著必然的聯系,保留了集合不能有重復成員的特性
- 區別是,有序集合中的元素是可以排序的,它給每個元素設置一個分數,作為排序的依據。(有序集合中的元素不可以重復,但是score 分數 可以重復,就和一個班里的同學學號不能重復,但考試成績可以相同)。
使用: 有序集合的命令都是 以 z 開頭 zadd 、 zrange、 zscore
zset類型:有序集合,每個元素關聯一個double類型的score,表示權重,按權重排序
| 添加元素 | zadd key score1 member1 score2 memeber2… |
| 返回指定范圍元素 | zrange key start stop |
| 返回指定范圍權重的元素 | zrangebyscore key min max |
| 返回指定成員的權重 | zscore key member |
| 刪除指定元素 | zrem key member1 member2… |
| 刪除指定權重范圍元素 | zrembyscore key min max |
- 實戰場景:
- 排行榜:有序集合經典使用場景。例如小說視頻等網站需要對用戶上傳的小說視頻做排行榜,榜單可以按照用戶關注數,更新時間,字數等打分,做排行。
6.鍵命令
| 查找鍵(參數支持正則) | keys pattern(keys 查看所有鍵,keys a查找a開頭的鍵) |
| 判斷鍵是否存在 | exists key(存在返回1,不存在返回0) |
| 查看鍵的類型 | type key |
| 刪除鍵及對應的值 | del key1 key2… |
| 設置鍵的過期時間 | expire key seconds |
| 查看鍵的有效時間 | ttl key |
官方操作詳解
二、Redis與Python交互
1.虛擬環境中安裝redis
- 安裝包
安裝Redis的有3種方式https://github.com/andymccurdy/redis-py
- 第一種:進?虛擬環境py_django,聯?安裝包redis
- 第二種:進?虛擬環境py_django,聯?安裝包redis
- 第三種:到中?官?-客戶端下載redis包的源碼,使?源碼安裝
2.調?模塊
引?模塊 from redis import *這個模塊中提供了StrictRedis對象(Strict嚴格),?于連接redis服務器,并按照不同類型提供 了不同?法,進?交互操作
3.StrictRedis對象?法
- 通過init創建對象,指定參數host、port與指定的服務器和端?連接,host默認為localhost,port默認為6379,db默認為0
簡寫
sr=StrictRedis()- 根據不同的類型,擁有不同的實例?法可以調?,與前?學的redis命令對應,?法需要的參數與命令的參數?致
- 例:
準備:
在桌面上創建redis目錄
使用pycharm打開 redis目錄
創建redis_string.py文件
- string-增加
?法set,添加鍵、值,如果添加成功則返回True,如果添加失敗則返回False
編寫代碼如下
- string-獲取
?法get,添加鍵對應的值,如果鍵存在則返回對應的值,如果鍵不存在則返回None
編寫代碼如下
- string-修改
?法set,如果鍵已經存在則進?修改,如果鍵不存在則進?添加
編寫代碼如下
- string-刪除
?法delete,刪除鍵及對應的值,如果刪除成功則返回受影響的鍵數,否則則返 回0
編寫代碼如下 from redis import * if __name__=="__main__":try:#創建StrictRedis對象,與redis服務器建?連接sr=StrictRedis()#設置鍵name的值,如果鍵已經存在則進?修改,如果鍵不存在則進?添加result = sr.delete('name')#輸出響應結果,如果刪除成功則返回受影響的鍵數,否則則返回0print(result)except Exception as e:print(e)- 獲取鍵
?法keys,根據正則表達式獲取鍵
編寫代碼如下
操作方法基本與redis數據庫操作一樣
4.django存儲session
- session的redis存儲配置
- 修改settings文件,增加如下項
- 測試
打開booktest/views.py文件,創建session_set和session_get視圖如下
- 打開booktest/urls.py文件,配置url如下
- 通過redis-cli客戶端查看
Base64在線解碼http://base64.xpcha.com/
總結
以上是生活随笔為你收集整理的Redis数据操作和与Python交互的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis简介及安装
- 下一篇: 输入某年某月某日,判断这一天是这一年的第