Ruby on RailsでRedisのLIST操作
RailsでRedisのLIST型操作のコード例が見当たらなかったので備忘録
rpush, lpush で追加
lrange で取得
lrem, rpop, lpop で削除
ドキュメントhttps://www.rubydoc.info/github/redis/redis-rb/Redis
前提
Gemfileに追記
gem 'redis'
予めRedisインスタンスをnewしておく
REDIS = Redis.new
rpushで追加
REDIS.rpush("hogelist", "item-a")
>["item-a"]
REDIS.rpush("hogelist", "item-b")
REDIS.rpush("hogelist", "item-c")
>["item-a", "item-b", "item-c"]
配列でまとめて追加もできる
REDIS.rpush("hogelist", ["item-d","item-d","item-d"])
>["item-a", "item-b", "item-c", "item-d", "item-d", "item-d"]
lpushで先頭に追加できる
REDIS.lpush("hogelist", "item-X")
REDIS.lpush("hogelist", ["item-Y","item-Y"])
>["item-Y", "item-Y", "item-X", "item-a", "item-b", "item-c", "item-d", "item-d", "item-d"]
lrangeで取得
REDIS.lrange("hogelist", 0, -1)
>["item-Y", "item-Y", "item-X", "item-a", "item-b", "item-c", "item-d", "item-d", "item-d"]
第二、第三引数で配列インデックスを指定することで部分取得できる。
REDIS.lrange("hogelist", 0, 0)
>["item-Y"]
REDIS.lrange("hogelist", 0, 3)
>["item-Y", "item-Y", "item-X", "item-a"]
REDIS.lrange("hogelist", 3, 3)
>["item-a"]
※インデックスが不正だと空になる
REDIS.lrange("hogelist", 3, 2)
>
※通常のgetだとエラーになる
REDIS.get("hogelist")
削除
delでLIST全削除
REDIS.del("hogelist")
>
部分削除
元:["item-Z", "item-Y", "item-Y", "item-X", "item-a", "item-Z", "item-b", "item-c", "item-d", "item-d", "item-d", "item-Z"]から
値を指定して削除
REDIS.lrem("hogelist", 0, "item-Z")
>["item-Y", "item-Y", "item-X", "item-a", "item-b", "item-c", "item-d", "item-d", "item-d"]
第二引数で削除数を指定 ※上のように0で全部
REDIS.lrem("hogelist", 2, "item-d")
>["item-Y", "item-Y", "item-X", "item-a", "item-b", "item-c", "item-d"]
※実際にある数より多くてもエラーにはならない
REDIS.lrem("hogelist", 3, "item-b")
>["item-Y", "item-Y", "item-X", "item-a", "item-c", "item-d", "item-d", "item-d"]
rpopで末尾削除
REDIS.rpop("hogelist")
>["item-Y", "item-Y", "item-X", "item-a", "item-c", "item-d", "item-d"]
lpopで先頭削除
REDIS.lpop("hogelist")
>["item-Y", "item-X", "item-a", "item-c", "item-d", "item-d"]