您好,登錄后才能下訂單哦!
今天小編給大家分享一下Python redis的操作方法有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
定義
1、位圖不是真正的數據類型,它是定義在字符串類型中 2、一個字符串類型的值最多能存儲512M字節的內容,位上限:2^32 # 1MB = 1024KB # 1KB = 1024Byte(字節) # 1Byte = 8bit(位)
強勢點
可以實時的進行統計,極其節省空間。官方在模擬1億2千8百萬用戶的模擬環境下,在一臺MacBookPro上,典型的統計如“日用戶數”的時間消耗小于50ms, 占用16MB內存
SETBIT 命令
說明:設置某位置上的二進制值
語法:SETBIT key offset value
參數:offset - 偏移量 從0開始
value - 0或者1
示例:
# 默認擴展位以0填充 127.0.0.1:6379> SET mykey ab OK 127.0.0.1:6379> GET mykey "ab" 127.0.0.1:6379> SETBIT mykey 0 1 (integer) 0 127.0.0.1:6379> GET mykey "\xe1b" 127.0.0.1:6379>
GETBIT 命令
說明:獲取某一位上的值
語法:GETBIT key offset
示例:
127.0.0.1:6379> GETBIT mykey 3 (integer) 0 127.0.0.1:6379> GETBIT mykey 0 (integer) 1 127.0.0.1:6379>
BITCOUNT 命令
說明:統計鍵所對應的值中有多少個 1
語法:BITCOUNT key start end
參數:start/end 代表的是 字節索引
示例:
127.0.0.1:6379> SET mykey1 ab OK 127.0.0.1:6379[4]> BITCOUNT mykey (integer) 6 127.0.0.1:6379[4]> BITCOUNT mykey 0 0 (integer) 3
應用場景案例
# 網站用戶的上線次數統計(尋找活躍用戶) 用戶名為key,上線的天作為offset,上線設置為1 # 示例 用戶名為 user1:login 的用戶,今年第1天上線,第30天上線 SETBIT user1:login 0 1 SETBIT user1:login 29 1 BITCOUNT user1:login
定義
1、由field和關聯的value組成的鍵值對 2、field和value是字符串類型 3、一個hash中最多包含2^32-1個鍵值對
優點
1、節約內存空間 - 特定條件下 【1,字段小于512個,2:value不能超過64字節】 2、可按需獲取字段的值
缺點(不適合hash情況)
1,使用過期鍵功能:鍵過期功能只能對鍵進行過期操作,而不能對散列的字段進行過期操作 2,存儲消耗大于字符串結構
基本命令操作
# 1、設置單個字段 HSET key field value HSETNX key field value # 2、設置多個字段 HMSET key field value field value # 3、返回字段個數 HLEN key # 4、判斷字段是否存在(不存在返回0) HEXISTS key field # 5、返回字段值 HGET key field # 6、返回多個字段值 HMGET key field filed # 7、返回所有的鍵值對 HGETALL key # 8、返回所有字段名 HKEYS key # 9、返回所有值 HVALS key # 10、刪除指定字段 HDEL key field # 11、在字段對應值上進行整數增量運算 HINCRBY key field increment # 12、在字段對應值上進行浮點數增量運算 HINCRBYFLOAT key field increment
python操作hash
# 1、更新一條數據的屬性,沒有則新建 hset(name, key, value) # 2、讀取這條數據的指定屬性, 返回字符串類型 hget(name, key) # 3、批量更新數據(沒有則新建)屬性,參數為字典 hmset(name, mapping) # 4、批量讀取數據(沒有則新建)屬性 hmget(name, keys) # 5、獲取這條數據的所有屬性和對應的值,返回字典類型 hgetall(name) # 6、獲取這條數據的所有屬性名,返回列表類型 hkeys(name) # 7、刪除這條數據的指定屬性 hdel(name, *keys)
應用場景:用戶維度數據統計
用戶維度統計 統計數包括:關注數、粉絲數、喜歡商品數、發帖數 用戶為key,不同維度為field,value為統計數 比如關注了5人 HSET user:10000 fans 5 HINCRBY user:10000 fans 1
python操作hash
import redis # 創建redis數據庫的連接對象 r = redis.Redis(password='123456') # 操作hash r.hset('pyhk1', 'username', 'aid2102') r.hmset('pyhk1', {'age': 18, 'major': 'python'}) print(r.hget('pyhk1', 'username').decode()) print(r.hmget('pyhk1', ['username', 'age'])) print(r.hgetall('pyhk1')) # 字典推導式 data = {k.decode(): v.decode() for k, v in r.hgetall('pyhk1').items()} print(data) r.hdel('pyhk1','age') print(r.hgetall('pyhk1')) # 刪除鍵 r.delete('pyhk1')
特點
1、無序、去重 2、元素是字符串類型 3、最多包含2^32-1個元素
基本命令
# 1、增加一個或者多個元素,自動去重;返回值為成功插入到集合的元素個數 SADD key member1 member2 # 2、查看集合中所有元素 SMEMBERS key # 3、刪除一個或者多個元素,元素不存在自動忽略 SREM key member1 member2 # 4、元素是否存在 SISMEMBER key member # 5、隨機返回集合中指定個數的元素,默認為1個 SRANDMEMBER key [count] # 6、彈出成員 SPOP key [count] # 7、返回集合中元素的個數,不會遍歷整個集合,只是存儲在鍵當中了 SCARD key # 8、把元素從源集合移動到目標集合 SMOVE source destination member # 9、差集(number1 1 2 3 number2 1 2 4 結果為3) SDIFF key1 key2 # 10、差集保存到另一個集合中 SDIFFSTORE destination key1 key2 # 11、交集 SINTER key1 key2 SINTERSTORE destination key1 key2 # 11、并集 SUNION key1 key2 SUNIONSTORE destination key1 key2
案例: 新浪微博的共同關注
# 需求: 當用戶訪問另一個用戶的時候,會顯示出兩個用戶共同關注過哪些相同的用戶 # 設計: 將每個用戶關注的用戶放在集合中,求交集即可 # 實現: user001 = {'peiqi','qiaozhi','danni'} user002 = {'peiqi','qiaozhi','lingyang'} user001和user002的共同關注為: SINTER user001 user002 結果為: {'peiqi','qiaozhi'}
python操作set
import redis r = redis.Redis(password='123456') ''' 武將: 張飛 許褚 趙云 馬超 周瑜 文臣: 諸葛亮 周瑜 司馬懿 結果: 1.純武將 2.純文臣 3.文武雙全 4.文臣武將 ''' # set集合類型的操作 r.sadd('武將', '張飛', '許褚', '趙云', '馬超', '周瑜') r.sadd('文臣', '諸葛亮', '周瑜', '司馬懿') data1 = r.sdiff('武將', '文臣') result = [] for item in data1: result.append(item.decode()) print('純武將:', result) data2 = r.sdiff('文臣', '武將') result = [] for item in data2: result.append(item.decode()) print('純文臣:', result) data3 = r.sinter('文臣', '武將') result = [] for item in data3: result.append(item.decode()) print('文武雙全:', result) data4 = r.sunion('文臣', '武將') result = [] for item in data4: result.append(item.decode()) print('文臣武將:', result)
特點
1、有序、去重 2、元素是字符串類型 3、每個元素都關聯著一個浮點數分值(score),并按照分值從小到大的順序排列集合中的元素(分值可以相同) 4、最多包含2^32-1元素
示例
一個保存了水果價格的有序集合
分值 | 2.0 | 4.0 | 6.0 | 8.0 | 10.0 |
---|---|---|---|---|---|
元素 | 西瓜 | 葡萄 | 芒果 | 香蕉 | 蘋果 |
一個保存了員工薪水的有序集合
分值 | 6000 | 8000 | 10000 | 12000 | |
---|---|---|---|---|---|
元素 | lucy | tom | jim | jack |
一個保存了正在閱讀某些技術書的人數
分值 | 300 | 400 | 555 | 666 | 777 |
---|---|---|---|---|---|
元素 | 核心編程 | 阿凡提 | 本拉登 | 阿姆斯特朗 | 比爾蓋茨 |
有序集合常用命令
# 在有序集合中添加一個成員 返回值為 成功插入到集合中的元素個數 zadd key score member # 查看指定區間元素(升序) zrange key start stop [withscores] # 查看指定區間元素(降序) zrevrange key start stop [withscores] # 查看指定元素的分值 zscore key member # 返回指定區間元素 # offset : 跳過多少個元素 # count : 返回幾個 # 小括號 : 開區間 zrangebyscore fruits (2.0 8.0 zrangebyscore key min max [withscores] [limit offset count] # 每頁顯示10個成員,顯示第5頁的成員信息: # limit 40 10 # MySQL: 每頁顯示10條記錄,顯示第5頁的記錄 # limit 40,10 # limit 2,3 顯示: 第3 4 5條記錄 # 刪除成員 zrem key member # 增加或者減少分值 zincrby key increment member # 返回元素排名 zrank key member # 返回元素逆序排名 zrevrank key member # 刪除指定區間內的元素 zremrangebyscore key min max # 返回集合中元素個數 zcard key # 返回指定范圍中元素的個數 zcount key min max zcount salary 6000 8000 zcount salary (6000 8000# 6000<salary<=8000 zcount salary (6000 (8000#6000<salary<8000 # 并集 zunionstore destination numkeys key [weights 權重值] [AGGREGATE SUM|MIN|MAX] # zunionstore salary3 2 salary salary2 weights 1 0.5 AGGREGATE MAX # 2代表集合數量,weights之后 權重1給salary,權重0.5給salary2集合,算完權重之后執行聚合AGGREGATE # 交集:和并集類似,只取相同的元素 zinterstore destination numkeys key1 key2 weights weight AGGREGATE SUM(默認)|MIN|MAX
python操作sorted set
import redis r = redis.Redis(password='123456') # 有序集合類型的操作 r.zadd('pyzk1', {'tedu': 100, 'tedu2': 200}) print(r.zrange('pyzk1', 0, -1, withscores=True)) r.zadd('pyzk2', {'tedu2': 200, 'tedu3': 200}) # 并集運算 r.zunionstore('pyzk3',['pyzk1','pyzk2'],aggregate='sum') print(r.zrange('pyzk3', 0, -1, withscores=True)) # 并集運算(帶權重) r.zunionstore('pyzk4',{'pyzk1':0.8,'pyzk2':0.2}, aggregate='sum') print(r.zrange('pyzk4', 0, -1, withscores=True))
以上就是“Python redis的操作方法有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。