Jakožto objevitel všech objevenejch světadílů, vynálezce nejšišatějších kol a lenivá svině v jedný osobě, jsem snad stokrát neuspěšně hledal jak přímo v redic-cli
smazat všechny klíče s nějakým prefixem (nebo prostě klíče, který matchnou glob-like výraz — tedy prostě a jednoduše to, co umi KEYS). Marně. Takže:
- Redis to neumí,
- volat xargs & redis-cli nechci,
- připojit se nějakým klientem a procyklit nechci (mega boilerplate kvůli pičovince)
- blablablá
a tak jsem objevil (tadá), že Redis má od 2.6 integrovanou Luu. Chachá!
verze z první ruky:
eval "for k,v in ipairs(redis.call('keys', 'bsedv*')) do redis.call('del', v) end" 0`
z druhý (má kontrolu, že se fakt něco stalo):
eval "local kexpr='bsdev*'
for k,v in ipairs(redis.call('keys', kexpr)) do redis.call('del', v) end
return #redis.call('keys', kexpr)" 0
no a něco normálnějšího:
eval "local kexpr='bsedv*'; redis.call('del', unpack(redis.call('keys', kexpr))); return #redis.call('keys', kexpr)" 0
když to ořežu na to podstatný, nevypadá už to tak zle:
eval "redis.call('del', unpack(redis.call('keys', 'bsedv*')))" 0
PS. Luu moc neovladám, ale začínám na to makat. Stejně jako na čemkoliv jiným. Tedy výhledově.