久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Python redis的操作方法有哪些

165次閱讀
沒有評論

共計 5653 個字符,預計需要花費 15 分鐘才能閱讀完成。

今天丸趣 TV 小編給大家分享一下 Python redis 的操作方法有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

位圖操作 bitmap

定義

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
127.0.0.1:6379  GET mykey
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
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

Hash 散列數據類型

定義

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)

集合數據類型(set)

特點

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)

有序集合 sortedset

特點

1、有序、去重
2、元素是字符串類型
3、每個元素都關聯著一個浮點數分值 (score),并按照分值從小到大的順序排列集合中的元素(分值可以相同)4、最多包含 2^32- 1 元素 

示例

一個保存了水果價格的有序集合

分值 2.04.06.08.010.0 元素西瓜葡萄芒果香蕉蘋果

一個保存了員工薪水的有序集合

分值 600080001000012000
元素 lucytomjimjack

一個保存了正在閱讀某些技術書的人數

分值 300400555666777 元素核心編程阿凡提本拉登阿姆斯特朗比爾蓋茨

有序集合常用命令

#  在有序集合中添加一個成員   返回值為   成功插入到集合中的元素個數
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 的操作方法有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,丸趣 TV 小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計5653字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 子长县| 杭锦旗| 称多县| 万载县| 高邮市| 孟津县| 广水市| 偏关县| 锡林浩特市| 湖南省| 乐安县| 灵丘县| 巩留县| 益阳市| 壶关县| 桑日县| 徐州市| 泸定县| 垣曲县| 青铜峡市| 杭州市| 雅江县| 龙南县| 保康县| 阳高县| 突泉县| 六安市| 泰兴市| 广水市| 霍邱县| 建德市| 清流县| 彰化县| 潞西市| 潼关县| 邢台县| 崇义县| 天峨县| 科尔| 化州市| 双江|