如何将存储在 redis 中的数据与数据库中的数据同步?
How do you sync data stored in redis with what's in the database?
前提是我将用户数据从我的数据库加载到redis。假设 5 秒过去了,数据库中的用户信息已经更新。
检查redis中的数据是否不同步的最好方法是什么?您是否定期调用数据库并检查您的数据是否与数据库中存储的数据相同?还是检查何时将一些数据提交到数据库?
我正在使用 stackexchange.redis 作为客户端,如果这有什么不同的话。
您的问题的答案取决于软件架构和风格,您的应用程序是否有效。
如果您只有一个应用程序和一个组件(整体方式),数据同步应该在应用程序内发生。通过应用更新User,记录写入数据库和Redis。
如果您有多个 applications/components(微服务方式),这会有点困难。一个应用程序更新数据库中的用户信息,但其他应用程序不知道。所以你要么:
- 使Redis中的数据失效,所以下一个获取用户详情的应用程序会先看到Redis中没有存储任何内容,然后再去数据库中获取记录并将其存储到Redis中
- 或者:使用 TTL(有史以来最糟糕的选择)。
- 如果记录被写入 "somehow" 到数据库中,而您无法控制该应用程序,那是最坏的情况。在这种情况下我会选择 TTL。
HTH,马克
前提是我将用户数据从我的数据库加载到redis。假设 5 秒过去了,数据库中的用户信息已经更新。
检查redis中的数据是否不同步的最好方法是什么?您是否定期调用数据库并检查您的数据是否与数据库中存储的数据相同?还是检查何时将一些数据提交到数据库?
我正在使用 stackexchange.redis 作为客户端,如果这有什么不同的话。
您的问题的答案取决于软件架构和风格,您的应用程序是否有效。
如果您只有一个应用程序和一个组件(整体方式),数据同步应该在应用程序内发生。通过应用更新User,记录写入数据库和Redis。
如果您有多个 applications/components(微服务方式),这会有点困难。一个应用程序更新数据库中的用户信息,但其他应用程序不知道。所以你要么:
- 使Redis中的数据失效,所以下一个获取用户详情的应用程序会先看到Redis中没有存储任何内容,然后再去数据库中获取记录并将其存储到Redis中
- 或者:使用 TTL(有史以来最糟糕的选择)。
- 如果记录被写入 "somehow" 到数据库中,而您无法控制该应用程序,那是最坏的情况。在这种情况下我会选择 TTL。
HTH,马克