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

Как да преименувате полета в хеш за множество ключове в Redis

Да приемем, че искате да започнете да наименувате полета с under_scores, а друг член на екипа използва camelCase. Сега вашите хешове на redis са бъркотия и предпочитате да се придържате към една конвенция. Имате нужда от начин да преименувате полета във всички хешове.

Redis няма начин за преименуване на полета в хеш. Но по-важното е, че няма начин да го направите за всички хешове, които сте създали.

За щастие, малко магия на командния ред е всичко, което е необходимо, за да поправите бъркотията.


Тази команда ще намери ключове, съответстващи на шаблона users:*, и след това ще преименува полета

  • дата_на_създаване до дата на създаване
  • posttypeid към postTypeId
  • view_count до viewCount
  • … и така нататък

Липсващата команда „hrename“

Redis няма команда hrename, така че първо пишем такава в lua скрипт. Тази команда ще преименува полета в рамките на един хеш.

evalsha <script-sha1-identifier> 1 <key> <old-field-1> <new-field-1>...


Първо ще трябва да заредите скрипта. Командата cat hrename.lua | redis-cli -x script load зарежда скрипта и връща SHA1 идентификатор. Можете да използвате този идентификатор, когато искате да извикате скрипта.

Преименуване на полета в множество хешове

Сега, когато имаме команда за коригиране на един хеш, трябва да я изпълним в цикъл за всички хешове, които съответстват на шаблон. Скриптът hash_bulk_rename_fields.sh прави точно това.

  1. Първо използваме redis-cli --scan --pattern <pattern> за да получите списък с ключове, по един ключ на ред.
  2. След това предаваме ключовете през grep . Командата за сканиране на Redis не приема регулярни изрази, така че правим основно филтриране със сканиране и след това предоставяме по-добър регулярен израз чрез grep.
  3. След това стартираме awk скрипт за всеки ключ. Този awk скрипт е малко сложен, така че ще го разбием
  4. Скриптът awk има команден шаблон evalsha <sha1> 1 __key__ <old field name> <new field name>.. . Това е командата, която ще се изпълнява за всички ключове.
  5. За всеки съответстващ ключ командата awk замества __key__ с действителния ключ
  6. След това преобразуваме командата низ във формат на протокола redis. Това е необработеният формат, който redis разбира.
  7. Накрая изпращаме необработените команди към redis-cli с помощта на флага –pipe. Това е най-ефективният начин за изпращане на групови команди до redis.

Персонализиране на този скрипт

  1. Можете да промените --pattern и командата grep, за да изберете ключовете, които са от тип хеш
  2. Можете да персонализирате cmd_template за да включите полетата, които искате да преименувате
  3. Ако вашият Redis сървър не е на localhost, ще трябва да предоставите хост, порт и парола два пъти в командата, по принцип всеки път, когато извикате redis-cli.

Вижте също

  • Преименувайте няколко клавиша с помощта на сканиране
  • Изтриване на клавиши, съответстващи на шаблон
  • Задайте изтичане на няколко ключа
  • RDBTools GUI за Redis ви позволява да визуализирате груповите си действия и предоставя мощен GUI за управление на данни в Redis. Това е безплатно изтегляне!

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Планиране на задачи за целина с голямо ETA

  2. Трябва ли два модула да използват една и съща връзка с Redis? (работя с Flask)

  3. Работникът на python-rq се затваря автоматично

  4. Разбиране на кеширането на Laravel:Cache фасада и Redis

  5. Пренасочване на портове с nginx от java