我很难理解使用redis作为缓存的应用程序的开始到结束调用过程。假设一个应用程序有一个数据库,比如SQL,并且正在使用redis缓存,那么这个过程的时间是如何工作的呢?据我所知,redis调用SQL DB缓存数据,UI调用并直接从redis消耗数据,因此限制了对SQL DB的调用。通常,redis在什么时候调用DB来获取数据?它如何使其与SQL DB保持同步?我只是想理解这个高层次的东西。谢谢!
发布于 2017-05-26 23:53:35
Redis只是一个缓存,它提供了一个高速的数据存储,而数据库速度更慢,但更可靠,功能更多。您的应用程序负责从Redis获取数据,如果找不到数据,则使用适当的过期和失效机制从数据库中提取数据并将其添加到Redis中。
发布于 2017-05-27 00:34:29
让我们来看一个简单的例子。让我们考虑一个假想的Python应用程序,它使用Redis缓存用户对象。用户对象以散列数据类型缓存在Redis中的关键字user:{id}下。用户数据的记录系统存储在关系数据库中。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)这个简化的示例省略了在分布式环境中保持缓存和数据库一致性的许多细节,但对于单个节点来说,这是基本的过程。你的应用程序必须处理缓存的细节,检查缓存命中,并在写入时失效。
发布于 2017-05-26 23:53:28
我自己从来没有遇到过Redis调用SQL DB的场景。由于Redis是一个键值存储,它将自己的数据保存在RAM中,因此它通常直接用于应用程序的缓存。在这些情况下,根本不涉及SQL DB。
Redis最大的优点是,许多操作在恒定的时间内返回数据,而与存储了多少元素无关。这就是为什么它非常适合许多需要非常快响应时间的用例,比如缓存和锁定机制。
https://stackoverflow.com/questions/44205523
复制相似问题