Redis
 sql >> база данни >  >> NoSQL >> Redis

По-бърз начин за повторение на всички ключове и стойности в redis db

Първо, най-бързият начин е да направите всичко това в EVAL.

Следващият препоръчителен подход за повторение на всички ключове е SCAN. Няма да се повтаря по-бързо от KEYS , но ще позволи на Redis да обработва някои други действия между тях, така че ще помогне за цялостното поведение на приложението.

Скриптът ще бъде нещо като local data={} local i=1 local mykeys=redis.call(\"KEYS\",\"*\") for k=1,#mykeys do local tmpkey=mykeys[k] data[i]={tmpkey,redis.call(\"GET\",tmpkey)} i=i+1 end return data , но ще се провали, ако имате ключове, недостъпни с GET (като набори, списъци). Трябва да добавите обработка на грешки към него. Ако имате нужда от сортиране, можете да го направите директно в LUA или по-късно от страна на клиента. Вторият ще бъде по-бавен, но няма да позволи на други потребители на редис инстанция да чакат.

Примерен изход:

127.0.0.1:6370> eval "local data={} local i=1 local mykeys=redis.call(\"KEYS\",\"*\") for k=1,#mykeys do local tmpkey=mykeys[k] data[i]={tmpkey,redis.call(\"GET\",tmpkey)} i=i+1 end return data" 0
1) 1) "a"
   2) "aval"
2) 1) "b"
   2) "bval"
3) 1) "c"
   2) "cval"
4) 1) "d"
   2) "dval"
5) 1) "e"
   2) "eval"
6) 1) "f"
   2) "fval"
7) 1) "g"
   2) "gval"
8) 1) "h"
   2) "hval"


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Java клиент за свързване на ElasticCache Redis Cache Node

  2. Какво е Redis pubsub и как да го използвам?

  3. _http_server.js:192 throw new RangeError(`Невалиден код на състоянието:${statusCode}`);

  4. Не може да сканира с помощта на шаблона Redis

  5. Трябва ли да създам нов Redis клиент за всяка връзка?