开发者

redis实现删除list中特定索引的值

开发者 https://www.devze.com 2024-08-10 10:40 出处:网络 作者: lbzz
目录Redis删除list中特定索引的值LSET与LREM结合删除list中特定索引的值补充redis对于删除list中的某个元素总结redis删除list中特定索引的值
目录
  • Redis删除list中特定索引的值
    • LSET与LREM结合删除list中特定索引的值
    • 补充
  • redis对于删除list中的某个元素
    • 总结

      redis删除list中特定索引的值

      Redis可以通过LINDEX key index获取list中的特定值, 但无法直接删除特定索引下的值.

      LSET与LREM结合删除list中特定索引的值

      两步:

      • 先用LSET在指定索引位置上设置特殊值: LSjavascriptET key index value在指定索引位置的值替换为value
      • 再用LREM删除该特殊值: LREM key n value, 从左边删除n个value

      例如:删除list1索引3对应的在值

      LSET list1 3 del
      LREM list1 1 del

      补充

      在Redis中, list是双向链表有两种索引:

      • 正向索引: 0, 1, 2, 3, ...
      • 逆向索引: -1, -2, -3, ...

      与删除的相关的操作有:

      • LPOP / RPOP key: 从左边/右边弹出一个值
      • LREM key n value: 从左边删除n个value
      • LTRIM key begin-index, end-index: 仅保留指定区间的元素

      Redis的区间都是闭区间, [begin-index, end-index]

      redis对于删除list中的某个元素

      近期要接im,我们的信息都是放到redis的缓存中,结构为list,如果知道特定的值的话,通过LREM  key  count  value这样就可以。对于redis的list结构,获取某个位置的值通过 LINDEX  key   index,如果想要获取list的长度,通过LLEN  key来获取。对于list中特定值的删除。

      我们打算获取全部的list中全部的内容,然后便来你找到要删http://www.devze.com除的值,通过LREM  key  count  value 删除。

      LREM key count value

      根据参数 count 的值,移除列表中与参数 value 相等的元素。

      count的值可以是以下几种:

      • count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
      • count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
      • cZdmrUSuyount = 0 : 移除表中所有与 value 相等的值。

      自己写了个Lua脚本,做了一个删除的过程:

      local result={}
      --list key
      local key="test"
      local size=0
      redis.call("select",2)
      -- 长度
      local length=redis.call("llen",key)
      -- 要删除的value
      local findKey="msg:382";
      if(length>0)then
          --获取去全部的list
          local values=redis.call("Lrange",key,0,length-1)
          local index=-1
          for i = 1, length,1 do
              if(string.find(values[i],findKey))
              then
                  index=i
                  redis.call("LREM",key,0,values[i])
                  break
              ehttp://www.devze.comnd
        php  end
          return true
      else
          return false 
      end

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号