栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Redis中将列表嵌套到结构中以减少顶层?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Redis中将列表嵌套到结构中以减少顶层?

在大多数情况下,

SADD
ZADD
使用流水线命令会更好。如果存在另一个客户端可能会在其间获取密钥的风险,请使用MULTI /
EXEC事务,从而获得不完整的对象。

在某些情况下,在哈希字段中对列表进行字符串化可能是合理的。

关于“快速退出键”,请确保使用

UNlink
代替
DEL

如果选择进行字符串化,则以下是使用Lua和Lua
CJSON库
在散列字段中自动支持插入和删除到JSON编码数组的方法:

插入

local items = cjson.depre(redis.call('HGET', KEYS[1], 'items'))table.insert(items, ARGV[1])return redis.call('HSET', KEYS[1], 'items', cjson.enpre(items))

按值删除

local items = cjson.depre(redis.call('HGET', KEYS[1], 'items'))local pos = -1;for i, v in ipairs(items) do    if ARGV[1] == v then        pos = i        break    endendif pos == -1 then    return -1else    table.remove(items, pos)    return redis.call('HSET', KEYS[1], 'items', cjson.enpre(items))end

用法示例

> HGETALL meta_key1) "user"2) "12345"3) "tag"4) "D12321341234123"5) "items"6) "{}"> eval "local items = cjson.depre(redis.call('HGET', KEYS[1], 'items')) n table.insert(items, ARGV[1]) n return redis.call('HSET', KEYS[1], 'items', cjson.enpre(items))" 1 meta_key value1(integer) 0> HGETALL meta_key1) "user"2) "12345"3) "tag"4) "D12321341234123"5) "items"6) "["value1"]"> eval "local items = cjson.depre(redis.call('HGET', KEYS[1], 'items')) n table.insert(items, ARGV[1]) n return redis.call('HSET', KEYS[1], 'items', cjson.enpre(items))" 1 meta_key value2(integer) 0> HGETALL meta_key1) "user"2) "12345"3) "tag"4) "D12321341234123"5) "items"6) "["value1","value2"]"> eval "local items = cjson.depre(redis.call('HGET', KEYS[1], 'items')) n local pos = -1; n for i, v in ipairs(items) do n     if ARGV[1] == v then n     pos = i n     break n end n end n if pos == -1 then n     return -1 n else n     table.remove(items, pos) n return redis.call('HSET', KEYS[1], 'items', cjson.enpre(items)) n end" 1 meta_key value1(integer) 0> HGETALL meta_key1) "user"2) "12345"3) "tag"4) "D12321341234123"5) "items"6) "["value2"]"> eval "local items = cjson.depre(redis.call('HGET', KEYS[1], 'items')) n local pos = -1; n for i, v in ipairs(items) do n     if ARGV[1] == v then n     pos = i n     break n end n end n if pos == -1 then n     return -1 n else n     table.remove(items, pos) n return redis.call('HSET', KEYS[1], 'items', cjson.enpre(items)) n end" 1 meta_key value3(integer) -1> HGETALL meta_key1) "user"2) "12345"3) "tag"4) "D12321341234123"5) "items"6) "["value2"]"


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/373996.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号