Ответы пользователя по тегу Redis
  • Актуальность данных при кэшировании, решается ли?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    «There are only two hard things in Computer Science: cache invalidation and naming things» — Phil Karlton

    Насколько я понял проблему, кэш проблемных данных нужно хранить в отдельном ключе редиса, по которому его легко найти и инвалидировать из разных мест.
    Ответ написан
    Комментировать
  • Почему падает база данных и весь Django сервер за ней?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Похоже на исчерпание памяти сервера. Стоит помониторить её использование, найти где утечка и устранить. Да и неплохо бы настроить сервер так, чтобы он такого не позволял.
    Ответ написан
    Комментировать
  • Почему в tarantool\redis хранимые процедуры если не на SQL, то на Lua?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Потому что интерпретатор Lua очень маленький и нетребовательный к ресурсам, но при этом обладает JIT-компилятором и высокой производительностью, а также встраивается намного проще, чем интерпретатор любого другого языка.
    Ответ написан
    9 комментариев
  • Websocket(redis) не хотят работать connectionRefusedError: [Errno 111] onnect call failed ('134.0.113.144', 6379)?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Django и Redis тут не при чём. Вам нужно убедиться, что с того хоста, где запускается django-проект, возможно подключение к хосту, где работает Redis.

    Ответ бонусом
    Эта инфа есть в документации. В рабочем режиме статику должен обслуживать web-сервер.
    Ответ написан
    4 комментария
  • Как пользоваться redis?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Вам стоит сначала выучить язык, а уж потом разбираться с библиотеками
    test1 = r.get('test1')
    Ответ написан
    Комментировать
  • Реализация redis pub/sub в tornado?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Tornado
    Седой и строгий
    Библиотеки brukva и toredis уже не обновлялись по нескольку лет. Зато Tornado в последнем обновлении окончательно перешёл на использование очереди событий asyncio, что даёт возможность использовать свежие и хорошие библиотеки. Например aioredis:
    import asyncio
    import aioredis
    from tornado import web, websocket
    from tornado.ioloop import IOLoop
    
    connections = []
    
    class WSHandler(websocket.WebSocketHandler):
        def open(self):
            connections.append(self)
    
        def on_message(self, message):
            ...
    
        def on_close(self):
            connections.remove(self)
    
    
    class GetHandler(web.RequestHandler):
        def get(self):
            self.render("chat.html")
    
    
    async def consumer(channel):
        while await channel.wait_message():
            msg = await channel.get(encoding='utf-8')
            for connection in connections:
                await connection.write_message(msg)
    
    
    async def setup():
        connection = await aioredis.create_redis('redis://localhost')
        channel = await connection.subscribe('notifications')
        asyncio.ensure_future(consumer(channel))
    
    
    application = web.Application([
        (r'/', GetHandler),
        (r'/chat/', WSHandler),
    ])    
    
    
    if __name__ == '__main__':
        application.listen(8000)
        loop = IOLoop.current()
        loop.add_callback(setup)
        loop.start()

    Естественно, это максимально упрощённый пример, в реальном коде соединения не стоит держать в глобальной переменной, а при завершении работы сервера стоит отписаться от канала и закрыть соединение с redis.
    Ответ написан
    Комментировать