Да приемем, че искате да започнете да наименувате полета с 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
прави точно това.
- Първо използваме
redis-cli --scan --pattern <pattern>
за да получите списък с ключове, по един ключ на ред. - След това предаваме ключовете през
grep
. Командата за сканиране на Redis не приема регулярни изрази, така че правим основно филтриране със сканиране и след това предоставяме по-добър регулярен израз чрез grep. - След това стартираме awk скрипт за всеки ключ. Този awk скрипт е малко сложен, така че ще го разбием
- Скриптът awk има команден шаблон
evalsha <sha1> 1 __key__ <old field name> <new field name>..
. Това е командата, която ще се изпълнява за всички ключове. - За всеки съответстващ ключ командата awk замества
__key__
с действителния ключ - След това преобразуваме командата низ във формат на протокола redis. Това е необработеният формат, който redis разбира.
- Накрая изпращаме необработените команди към redis-cli с помощта на флага –pipe. Това е най-ефективният начин за изпращане на групови команди до redis.
Персонализиране на този скрипт
- Можете да промените
--pattern
и командата grep, за да изберете ключовете, които са от тип хеш - Можете да персонализирате
cmd_template
за да включите полетата, които искате да преименувате - Ако вашият Redis сървър не е на localhost, ще трябва да предоставите хост, порт и парола два пъти в командата, по принцип всеки път, когато извикате redis-cli.
Вижте също
- Преименувайте няколко клавиша с помощта на сканиране
- Изтриване на клавиши, съответстващи на шаблон
- Задайте изтичане на няколко ключа
- RDBTools GUI за Redis ви позволява да визуализирате груповите си действия и предоставя мощен GUI за управление на данни в Redis. Това е безплатно изтегляне!