Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 196

254

Глава 8. Данные должны куда-то попадать

Значит, tire_kicker не посещал сайт во второй день.

Сколько пользователей посещает сайт каждый день?

>>> conn.bitop('and', 'everyday', *days)

68777

>>> conn.bitcount('everyday')

1

Угадайте с трех попыток, кто это:

>>> conn.getbit('everyday', big_spender)

1

Наконец, сколько уникальных пользователей посетили сайт за эти три дня?

>>> conn.bitop('or', 'alldays', *days)

68777

>>> conn.bitcount('alldays')

3

Кэши и истечение срока действия

У всех ключей Redis есть время жизни, или дата истечения срока действия. По умол-

чанию этот срок длится вечно. Мы можем использовать функцию expire(), чтобы

указать Redis, как долго хранить заданный ключ. Как показано далее, значением

является количество секунд:

>>> import time

>>> key = 'now you see it'

>>> conn.set(key, 'but not for long')

True

>>> conn.expire(key, 5)

True

>>> conn.ttl(key)

5

>>> conn.get(key)

b'but not for long'

>>> time.sleep(6)

>>> conn.get(key)

>>>

Команда expireat() указывает, что действие ключа истекает в заданное время

эпохи Unix. Это может оказаться полезным для того, чтобы кэш оставался свежим

и чтобы ограничить сессии авторизации.

Прочие серверы NoSQL

Серверы NoSQL, перечисленные здесь, могут работать с данными, объем которых

превышает объем доступной памяти, и многие из них требуют использования не-

скольких компьютеров. В табл. 8.6 показаны наиболее популярные серверы и их

библиотеки Python.

Упражнения

255

Таблица 8.6. Базы данных NoSQL

Сайт

Python API

Cassandra

pycassa

CouchDB