После некоторого изучения репозитория Редис ( версия 1.01 ) для использования в высоконагруженном проекте впечатления остаются хорошие.
Но лично мне одной простой вещи было недостаточно команды — подсчет количества ключей по шаблону.
Те.
Есть КЛЮЧИ , но возвращает массив со всеми ключами.
Которая, согласитесь, с размерами порядка сотен миллионов записей заставит сервер долго думать.
Если у него хватит на это ресурсов.
Немного покопавшись в исходном коде, была введена новая команда COUNT, которая возвращает количество записей по шаблону.
разница в redis.c 352a353
> static void countCommand(redisClient *c);
441a443
> {"count",countCommand,2,REDIS_CMD_INLINE},
755c757
< if (!(loops % 5)) {
---
> if (!(loops % 30)) {
2502a2505,2528
> static void countCommand(redisClient *c) {
> dictIterator *di;
> dictEntry *de;
> sds pattern = c->argv[1]->ptr;
> int plen = sdslen(pattern);
> int numkeys = 0;
>
> di = dictGetIterator(c->db->dict);
> if (!di) oom("dictGetIterator");
> while((de = dictNext(di)) != NULL) {
> robj *keyobj = dictGetEntryKey(de);
>
> sds key = keyobj->ptr;
> if ((pattern[0] == '*' && pattern[1] == '\0') ||
> stringmatchlen(pattern,plen,key,sdslen(key),0)) {
> if (expireIfNeeded(c->db,keyobj) == 0) {
> numkeys++;
> }
> }
> }
> dictReleaseIterator(di);
> addReplySds(c, sdscatprintf(sdsempty(),":%lu\r\n", numkeys));
> }
>
разница в redis-cli.c 98a99
> {"count",2,REDIS_CMD_INLINE},
разница в redis.py 301a302,306
> def count(self, pattern):
> self.connect()
> self._write('COUNT %s\r\n' % pattern)
> return self.get_response()
>
Наслаждаться! ;-)
Теги: #redis #Чулан
-
Покупка Компьютера Или Сборка Самостоятельно
19 Oct, 24 -
Life3D - В Поисках Планеров. Часть 2
19 Oct, 24 -
Три Слова О Лидере
19 Oct, 24 -
Оптимизируем Рабочий Процесс
19 Oct, 24 -
О Флагах 0X41414141 Раз
19 Oct, 24