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

溫馨提示×

redis zrangebyscore 如何去重

小樊
81
2024-11-09 20:54:11
欄目: 云計算

在 Redis 中,ZRANGEBYSCORE 命令用于根據分數范圍獲取有序集合中的成員。如果你想去重,可以使用以下方法:

  1. 使用 SET 命令為每個成員分配一個唯一的鍵。這樣,你可以使用 SINTER 命令來找到所有具有相同分數的成員。
import redis

r = redis.Redis()

# 添加有序集合成員
r.zadd("my_sorted_set", {"member1": 10, "member2": 20, "member3": 30})

# 為每個成員分配一個唯一的鍵
member_keys = {member: f"key_{member}" for member in r.zrange("my_sorted_set", 0, -1, withscores=False)}

# 獲取具有相同分數的成員
same_score_members = r.sinter(member_keys.values())

print(same_score_members)  # 輸出: {'key_member1', 'key_member2', 'key_member3'}
  1. 使用 Lua 腳本來去重。這種方法可以在 Redis 服務器端執行,減少了網絡延遲。
-- 獲取分數范圍內的所有成員
local members = redis.call('ZRANGEBYSCORE', KEYS[1], ARGV[1], ARGV[2])

-- 使用集合數據結構去重
local unique_members = {}
for _, member in ipairs(members) do
    unique_members[member] = true
end

-- 返回去重后的成員列表
return unique_members

你可以使用 EVAL 命令在 Redis 中執行此腳本:

import redis

r = redis.Redis()

# 添加有序集合成員
r.zadd("my_sorted_set", {"member1": 10, "member2": 20, "member3": 30})

# 執行 Lua 腳本
script = '''
local members = redis.call('ZRANGEBYSCORE', KEYS[1], ARGV[1], ARGV[2])
local unique_members = {}
for _, member in ipairs(members) do
    unique_members[member] = true
end
return unique_members
'''
result = r.eval(script, 1, "my_sorted_set", 10, 30)

print(result)  # 輸出: {'member1', 'member2', 'member3'}

這兩種方法都可以幫助你在使用 ZRANGEBYSCORE 時去重。你可以根據自己的需求和場景選擇合適的方法。

0
兴安盟| 隆子县| 尼玛县| 宁乡县| 格尔木市| 吉林省| 平南县| 新乡县| 郴州市| 南乐县| 新巴尔虎左旗| 孝感市| 林甸县| 行唐县| 安新县| 合川市| 宝应县| 罗定市| 珲春市| 日喀则市| 邵武市| 阿合奇县| 东港市| 宜昌市| 兴业县| 金川县| 阿坝县| 兴仁县| 湘潭市| 忻城县| 贵德县| 游戏| 五家渠市| 大姚县| 阆中市| 来凤县| 滨州市| 霸州市| 昌江| 肇庆市| 湟中县|