記事ディレクトリ
1.事前設定
最初に、WはSpringbootプロジェクトをビルドし、依存関係を導入します:
Spring Web、Springキャッシュ、redis、Spring Security
application.propertiesを構成する
spring.redis.host=192.168.176.128
spring.redis.port=6379
#给缓存取一个名字,后面会用到
spring.cache.cache-names=yolo
2.キャッシュの使用
(1)@CacheConfig
このアノテーションは、クラスですべてのメソッドによって使用されるキャッシュの名前を記述するためにクラスで使用されます。もちろん、このアノテーションを使用して特定のキャッシュアノテーションで名前を直接構成する必要はありません。サンプルコードは次のとおりです。
@Service
@CacheConfig(cacheNames = "yolo")
public class UserService {
}
キャッシュされたキーがすべて名前を追加することがわかります。
(2)@Cacheable
通常、このアノテーションはクエリメソッドに追加され、メソッドの戻り値がキャッシュされることを示します。デフォルトでは、キャッシュされたキーはメソッドパラメータであり、キャッシュされた値はメソッドの戻り値です。サンプルコードは次のとおりです。
@Cacheable(key = "#id")
public User getUserById(Integer id,String username) {
System.out.println("getUserById");
return getUserFromDBById(id);
}
複数のパラメータがある場合、デフォルトでは複数のパラメータがキーとして使用されます。キーとして1つのパラメータのみが必要な場合は、@Cacheable
注釈のkey属性を介してキーを指定できます。上記のコードは、idのみがキャッシュとして使用されることを意味します。キー。キーの複雑な要件がある場合は、keyGeneratorをカスタマイズできます。もちろん、ルートオブジェクトはSpring Cacheで提供され、keyGeneratorを定義せずにいくつかの複雑な効果を実現できます。
例:
@Service
//用来描述该类中所有方法使用的缓存名称
@CacheConfig(cacheNames = "yolo")
public class UserService {
//表示将该方法的返回值缓存起来
@Cacheable
public User getUserById(Integer id) {
System.out.println("getUserById>>>" + id);
User user = new User();
user.setId(id);
return user;
}
}
テストキャッシュ:
2番目の呼び出しが実行されず、キャッシュされた結果が使用されたため、メソッドが1回だけ実行されたことがわかります。
呼び出しによって渡されるパラメーターが同じでない場合、2つの異なる呼び出しと見なされます。
キーを指定した場合、キーの違いで判定し、キーが2回同じ場合は1回しか呼び出されません。
ここには複数のパラメーターがありますが、キーとしてidを指定するなど、キーを指定できます。
渡されたパラメーターは異なりますが、一度しか呼び出されないことがわかります。
(3)カスタムkeyGenerator
キーの複雑な要件がある場合は、keyGeneratorをカスタマイズできます
たとえば、ここで必要な主要な形式は次のとおりです。方法名:参数
//自定义 keyGenerator,将返回值当做 key
@Component
public class MyKeyGenerator implements KeyGenerator {
@Override
public Object generate(Object o, Method method, Object... objects) {
//可以根据自己的需求返回 key
return method.getName() + ":" + Arrays.toString(objects);
}
}
保存されたキー:
(4)@CacheEvict
この注釈は通常、deleteメソッドに追加されます。データベース内のデータが削除されると、関連するキャッシュデータも自動的に消去されます。注釈を使用する場合、特定の条件(条件属性)に従って削除するように構成したり、すべてのキャッシュを消去するように構成したりすることもできます。 (AllEntries属性)、サンプルコードは次のとおりです。
@CacheEvict
public void deleteUserById(Integer id) {
System.out.println("deleteUserById>>>" + id);
}
2回目にキャッシュが使用されておらず、再度呼び出されていることがわかります。
(5)@CachePut
通常、このアノテーションはupdateメソッドに追加されます。データベース内のデータが更新されると、キャッシュ内のデータも更新されます。このアノテーションを使用すると、メソッドの戻り値を既存のキーに自動的に更新できます。サンプルコードは次のとおりです。
@CachePut(key = "#user.id")
public User updateUserById(User user) {
return user;
}
一度だけ呼び出され、2回目に直接キャッシュが使用されたことがわかりますが、このときのキャッシュは更新されたキャッシュです。
三、まとめ
Spring Bootでは、Redisキャッシュを使用して、RedisTemplateを使用して自分で実装するか、このメソッドを使用できます。このメソッドは、Spring Cacheが提供する統合インターフェースです。実装は、Redis、Ehcache、またはその他のサポートのいずれかです。標準化されたキャッシングフレームワーク。この観点から見ると、Spring CacheとRedisおよびEhcacheの関係は、JDBCとさまざまなデータベースドライバーの関係に似ています。
ゆう兄弟の動画を参照