Springの@Cacheableの使い方について教えてください。

Springでは、@Cacheableアノテーションはメソッドの戻り値をキャッシュして、同じパラメータを持つメソッドを再度呼び出す際には、メソッドの本体を実行せずに、結果をキャッシュから直接取得します。

@Cacheableアノテーションを使用するには、次の手順を実行する必要があります:

  1. <cache:アノテーション駆動/>
  2. @ キャッシュ可能
  3. @Cacheable(key = “#param”) を日本語で言うと、”@Cacheable(key = “#param”)”です。

例えば、次のUserServiceインターフェースと実装クラスを考えてみましょう。

public interface UserService {
    User getUserById(long id);
}

@Service
public class UserServiceImpl implements UserService {

    @Override
    @Cacheable(value = "userCache", key = "#id")
    public User getUserById(long id) {
        // 从数据库中获取用户数据
        // ...
        return user;
    }
}

上記の例では、@CacheableアノテーションがgetUserById()メソッドに使用され、キャッシュの名前が”userCache”、キーがidパラメーターであることが指定されています。getUserById()メソッドが呼び出されると、キャッシュに指定されたキーの結果がすでに存在する場合、結果をキャッシュから直接取得し、存在しない場合はメソッド本体を実行して結果をキャッシュに入れます。

@Cacheable注解を有効にするためには、Springの設定ファイルでキャッシュマネージャーを構成する必要があります。たとえば、SimpleCacheManagerを使用することができます。

<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
    <property name="caches">
        <set>
            <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="userCache"/>
        </set>
    </property>
</bean>

上記の構成では、”userCache”という名前のキャッシュが作成され、ConcurrentMapCacheFactoryBeanがキャッシュの実装として使用されています。EhcacheやRedisのような他のキャッシュ実装も利用することができます。

したがって、getUserById()メソッドが複数回呼び出される場合、同じIDパラメータが渡されると、メソッドの返り値はキャッシュから直接取得され、メソッド本体が実行されなくなり、システムのパフォーマンスが向上します。

bannerAds