Redis缓存和整个过程

时间:2017-05-26 15:46:30

标签: sql-server database caching redis

我无法理解使用redis作为缓存的应用程序的开始完成调用过程。假设一个应用程序有一个像SQL这样的数据库,并且使用redis来缓存该进程的时间如何工作?据我所知,redis调用SQL DB来缓存数据和UI调用,并直接从redis中使用该数据,因此限制了对SQL DB的调用。通常,redis何时调用DB来获取其数据?它是如何使它与SQL DB保持同步的?我只是想了解这个高级别。谢谢!

3 个答案:

答案 0 :(得分:1)

Redis只是一个缓存,它提供了一个高速数据存储,而数据库速度较慢但更可靠,功能更多。您的应用程序负责从Redis获取数据,如果它没有找到它,请将其从数据库中提取并将其添加到Redis,并使用适当的到期和失效机制。

答案 1 :(得分:1)

让我们来看一个简化的例子。让我们考虑Python中的一个假设应用程序,它使用Redis来缓存用户对象。用户对象在Hash数据类型的密钥user:{id}下的Redis中缓存。用户数据的记录系统存储在关系数据库中。 Id是一个整数,在db中生成pk。

要获取用户,我们将执行以下代码:

# r = redis.StrictRedis(hostname)
def get_user(r, id):
    key = "user:{}".format(id)
    user = r.hgetall(key)
    if user is None:
        return fetch_user_from_db(id)
    else:
        return user

要编写用户,我们将执行类似于以下的代码:

# r = redis.StrictRedis(hostname)
def update_user(r, user):
    key = "user:{}".format(user['id'])
    r.delete(key)
    write_user_to_db(user)

这个简化的示例省略了在分布式环境中保持缓存和数据库一致性的许多细节,但对于单个节点,这是基本过程。您的应用程序必须处理缓存的详细信息,检查缓存命中和写入时的无效。

答案 2 :(得分:0)

我自己从未遇到过Redis调用SQL DB的情况。由于Redis是一个键值存储,它将自己的数据保存在RAM中,因此它通常直接用于应用程序的缓存。在这些情况下,根本不涉及SQL DB。

Redis的最大优势在于许多操作以恒定时间返回数据,与存储的元素数量无关。这就是为什么它适用于许多用例,如缓存和锁定机制,需要非常快的响应时间。