【问题标题】:How to push a variable in redis list - redis command line如何在 redis 列表中推送变量 - redis 命令行
【发布时间】:2017-02-27 20:51:41
【问题描述】:

请检查以下命令,

redis /tmp/redis.sock> set s1 String1
OK
redis /tmp/redis.sock> set s2 String2
OK
redis /tmp/redis.sock> set s3 String3
OK
redis /tmp/redis.sock> LPUSH list s1 s2 s3
(integer) 3
redis /tmp/redis.sock> LRANGE list 0 -1
1) "s3"
2) "s2"
3) "s1"
redis /tmp/redis.sock>

当我尝试在 redis 列表中推送变量时,该值被视为字符串。是否有任何解决方法可以将变量添加到列表中?

谢谢。

【问题讨论】:

  • s1, s2, s3 实际上是添加到 Redis 的键。这就是你想要的吗?
  • @RaR 我想要 s1、s2 和 s3 变量的值。
  • Redis-cli 不直接支持变量。就像任何浏览器中的 javascript 控制台一样。您的第一步将在 push 命令中设置 3 个 redis 键(s1s2s3)和 s1s2s3 将被视为独立字符串。我相信,除非您使用 Lua 脚本,否则您无法实现您想要做的事情
  • 另外,为什么不能直接push到list中,而不是赋值给一些变量然后push呢?
  • set s1 String1 中的 s1 不是变量。只是一个字符串。

标签: redis


【解决方案1】:

Redis 列表中的元素是字符串。您不能在它们之间嵌套数据结构或创建引用。

【讨论】:

    【解决方案2】:

    如果要使用变量,可以使用Lua脚本,

    eval "redis.call('lpush', 'list', KEYS[1], KEYS[2], KEYS[3])" 3 String1 String2 String4
    

    参考this

    > eval "s1 = 'String1'" 0
    > eval "s2 = 'String2'" 0
    > eval "s3 = 'String3'" 0
    > eval "redis.call('lpush', 'list', s1, s2, s3)" 0
    

    Redis-cli 可能不允许创建全局变量s1s2s3。要获得许可,请参考此https://stackoverflow.com/a/19998708/6048928

    【讨论】:

      猜你喜欢
      • 2015-09-26
      • 2022-01-01
      • 2020-02-11
      • 2012-06-05
      • 2020-05-30
      • 2013-02-28
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多