RedisJSON用户数据存储与操作问题:查询、排序及容量疑问
RedisJSON 用户列表存储与操作方案
关于数组存储超过128个用户的问题
RedisJSON 对数组元素数量没有128个的限制,只要单个Redis key的总数据量不超过Redis默认的单个key最大值(512MB),且服务器内存足够支撑,存多少用户都不会触发错误。你可能混淆了Redis其他数据结构的限制,但RedisJSON的数组不存在这个上限。
核心操作实现命令
先修正之前的存储方式,避免数据覆盖:
# 初始化根结构,创建空的users_list数组 JSON.SET admin_users . '{"users_list": []}' # 追加用户到数组(替代之前直接覆盖的JSON.SET) JSON.ARRAPPEND admin_users .users_list '{"id":1, "username":"user1", "rank_score":95}' JSON.ARRAPPEND admin_users .users_list '{"id":2, "username":"user2", "rank_score":88}'
以下是你需要的四个操作的具体命令:
- 获取全部用户记录
直接取出整个用户数组:
JSON.GET admin_users .users_list
或者取出完整的根结构:
JSON.GET admin_users
- 查询指定ID的用户记录
用JSONPath过滤语法定位目标用户:
# 查询id为1的用户 JSON.GET admin_users '$.users_list[?(@.id == 1)]'
- 按rank_score降序排序获取记录
RedisJSON本身没有内置排序命令,有两种可行方案:
- 应用层处理:先取出整个数组,在后端代码中对数组按
rank_score字段降序排序。 - 结合RedisSearch实现:给用户字段创建索引,通过RedisSearch的排序查询能力实现(需先安装RedisSearch模块):
# 创建RedisSearch索引 FT.CREATE user_idx ON JSON PREFIX 1 admin_users SCHEMA $.id AS id NUMERIC $.rank_score AS rank_score NUMERIC $.username AS username TEXT # 按rank_score降序查询所有用户 FT.SEARCH user_idx '*' SORTBY rank_score DESC
- 删除ID为2的用户记录
用JSONPath定位后删除:
JSON.DEL admin_users '$.users_list[?(@.id == 2)]'
内容的提问来源于stack exchange,提问作者Gandalf
相关产品推荐
相关产品推荐

