def test_get_user_and_profile_through_cache(self): UserService.invalidate_user_cache(user_id=self.user1.id) UserService.invalidate_user_cache(user_id=self.user2.id) user1 = UserService.get_user_through_cache(self.user1.id) profile1 = UserService.get_profile_through_cache(self.user1.id) self.assertEqual(user1.id, profile1.user_id) UserService.invalidate_profile_cache(self.user1.id) profile1 = UserService.get_profile_through_cache(self.user1.id)
def get_profile(user): from accounts.services import UserService if hasattr(user, '_cached_user_profile'): return getattr(user, '_cached_user_profile') profile = UserService.get_profile_through_cache(user.id) setattr(user, '_cached_user_profile', profile) return profile
def get_profile(user): from accounts.services import UserService if hasattr(user, '_cached_user_profile'): return getattr(user, '_cached_user_profile') profile = UserService.get_profile_through_cache(user.id) # 使用user对象的属性进行缓存(cache),避免多次调用同一个user的profile时 # 重复对数据库进行查询。这里用profile这个变量保存了从数据库读取的信息。 setattr(user, '_cached_user_profile', profile) return profile
def get_profile(user): from accounts.services import UserService if hasattr(user, '_cached_user_profile'): return getattr(user, '_cached_user_profile') profile = UserService.get_profile_through_cache(user_id=user.id) # set profile as a property of user, access profile in memory setattr(user, '_cached_user_profile', profile) return profile
def get_profile(user): # import 放在函数里面避免循环依赖 from accounts.services import UserService if hasattr(user, '_cached_user_profile'): return getattr(user, '_cached_user_profile') profile = UserService.get_profile_through_cache(user.id) # 使用 user 对象的属性进行缓存(cache),避免多次调用同一个 user 的 profile 时 # 重复的对数据库进行查询 setattr(user, '_cached_user_profile', profile) return profile
def get_profile(user): # put import inside function to prevent cycling dependence from accounts.services import UserService if hasattr(user, '_cached_user_profile'): return getattr(user, '_cached_user_profile') profile = UserService.get_profile_through_cache(user.id) # cache User, avoid same user profile multi DB setattr(user, '_cached_user_profile', profile) return profile
def get_profile(user): from accounts.services import UserService if hasattr(user, '_cached_user_profile'): return getattr(user, '_cached_user_profile') #profile, _ = UserProfile.objects.get_or_create(user=user) profile = UserService.get_profile_through_cache(user.id) # utilize attribute of user object to cache info, this is to avoid calling DB many times # when retrieving the same user profile setattr(user, '_cached_user_profile', profile) return profile