From 0d818890295b7ab644752e26e08d928aca88f2cd Mon Sep 17 00:00:00 2001 From: liuwei Date: Wed, 28 Jan 2026 09:15:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E7=89=87=E9=98=B2=E6=AD=A2=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E3=80=82=E6=AF=8F=E6=AC=A1=E6=8F=90=E5=8F=96=E4=B9=8B?= =?UTF-8?q?=E5=90=8E=E5=B0=B1POP=E6=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/xiuren_image/main.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/plugins/xiuren_image/main.py b/plugins/xiuren_image/main.py index 116957d..b098ffe 100644 --- a/plugins/xiuren_image/main.py +++ b/plugins/xiuren_image/main.py @@ -203,19 +203,22 @@ class XiurenImagePlugin(MessagePluginInterface): def _get_random_pic(self) -> Optional[str]: """ - 从 Redis 随机获取图片路径 + 从 Redis 随机获取并移除图片路径(确保不重复使用) """ redis_key = ImageCacheManager.IMAGE_KEY_PREFIX + "all" try: - img = DBConnectionManager.get_instance().get_redis_connection().srandmember(redis_key) + # 使用 spop 随机弹出并删除一个元素 + img = DBConnectionManager.get_instance().get_redis_connection().spop(redis_key) + if img: # redis 返回 bytes,转字符串 return img.decode('utf-8') if isinstance(img, bytes) else img - else: - self.LOG.warning("Redis 中没有图片数据") - return None + + self.LOG.warning("Redis 中没有图片数据(可能已全部耗尽)") + return None + except Exception as e: - self.LOG.error(f"从 Redis 获取随机图片失败: {e}") + self.LOG.error(f"从 Redis 获取并删除随机图片失败: {e}") return None # def _get_random_pic(self) -> Optional[str]: