QA@IT
«質問へ戻る

tweak

2024
本文
 
 MULTIアリ、Redis 2.6のscriptingもアリ、とにかく一番簡潔に書けるのがいいです。どうするのがいいでしょうか。
 
-なお、やんごとなき事情によりクライアントは(比較的長いインターバルで)ポーリングせざるをえないという前提があります。
+なお、やんごとなき事情によりワーカーは(比較的長いインターバルで)ポーリングせざるをえないという前提があります。(BLPOPとかは使えないという意味です)

Redisで長さ1のキューを実現したい

早い者勝ちでそのスロットに置いたものを持って行かせたいのです。そして、スロットに置かれたものがまだ未消化の状態でさらに追加されたら、古いものを新しいもので上書きしたい(長さ1のキュー)のです。

たとえば、

SET mykey "Hello"
DEL mykey

のDELで"Hello"が帰ってくれば、SETは冪等性があるので望みどおりのことが実現できるのですが、実際にはDELは削除件数をかえします。

LPUSHRPOPだと、取り出し操作はアトミックになるのですが、キューなのでLPUSHを連打すると重複したデータが入ってしまいます。

MULTIアリ、Redis 2.6のscriptingもアリ、とにかく一番簡潔に書けるのがいいです。どうするのがいいでしょうか。

なお、やんごとなき事情によりワーカーは(比較的長いインターバルで)ポーリングせざるをえないという前提があります。(BLPOPとかは使えないという意味です)

早い者勝ちでそのスロットに置いたものを持って行かせたいのです。そして、スロットに置かれたものがまだ未消化の状態でさらに追加されたら、古いものを新しいもので上書きしたい(長さ1のキュー)のです。

たとえば、

```
SET mykey "Hello"
DEL mykey
```

のDELで"Hello"が帰ってくれば、SETは冪等性があるので望みどおりのことが実現できるのですが、実際にはDELは削除件数をかえします。

`LPUSH`と`RPOP`だと、取り出し操作はアトミックになるのですが、キューなので`LPUSH`を連打すると重複したデータが入ってしまいます。

MULTIアリ、Redis 2.6のscriptingもアリ、とにかく一番簡潔に書けるのがいいです。どうするのがいいでしょうか。

なお、やんごとなき事情によりワーカーは(比較的長いインターバルで)ポーリングせざるをえないという前提があります。(BLPOPとかは使えないという意味です)

質問を投稿

Redisで長さ1のキューを実現したい

早い者勝ちでそのスロットに置いたものを持って行かせたいのです。そして、スロットに置かれたものがまだ未消化の状態でさらに追加されたら、古いものを新しいもので上書きしたい(長さ1のキュー)のです。

たとえば、

SET mykey "Hello"
DEL mykey

のDELで"Hello"が帰ってくれば、SETは冪等性があるので望みどおりのことが実現できるのですが、実際にはDELは削除件数をかえします。

LPUSHRPOPだと、取り出し操作はアトミックになるのですが、キューなのでLPUSHを連打すると重複したデータが入ってしまいます。

MULTIアリ、Redis 2.6のscriptingもアリ、とにかく一番簡潔に書けるのがいいです。どうするのがいいでしょうか。

なお、やんごとなき事情によりクライアントは(比較的長いインターバルで)ポーリングせざるをえないという前提があります。

早い者勝ちでそのスロットに置いたものを持って行かせたいのです。そして、スロットに置かれたものがまだ未消化の状態でさらに追加されたら、古いものを新しいもので上書きしたい(長さ1のキュー)のです。

たとえば、

```
SET mykey "Hello"
DEL mykey
```

のDELで"Hello"が帰ってくれば、SETは冪等性があるので望みどおりのことが実現できるのですが、実際にはDELは削除件数をかえします。

`LPUSH`と`RPOP`だと、取り出し操作はアトミックになるのですが、キューなので`LPUSH`を連打すると重複したデータが入ってしまいます。

MULTIアリ、Redis 2.6のscriptingもアリ、とにかく一番簡潔に書けるのがいいです。どうするのがいいでしょうか。

なお、やんごとなき事情によりクライアントは(比較的長いインターバルで)ポーリングせざるをえないという前提があります。