亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python redis的操作方法有哪些

發布時間:2022-03-29 15:48:19 來源:億速云 閱讀:220 作者:iii 欄目:建站服務器

今天小編給大家分享一下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
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

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的操作方法有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南召县| 大厂| 边坝县| 宣化县| 景东| 扎囊县| 四川省| 九龙坡区| 武隆县| 淄博市| 密山市| 宾阳县| 清河县| 三门峡市| 阿克苏市| 文昌市| 波密县| 二连浩特市| 纳雍县| 扎鲁特旗| 开平市| 佛山市| 舞阳县| 旬阳县| 湾仔区| 渭源县| 天柱县| 兖州市| 普宁市| 建阳市| 黄骅市| 兴和县| 马边| 贵德县| 浏阳市| 文登市| 稷山县| 福贡县| 茶陵县| 永清县| 仙桃市|