Redis は、文字列、ハッシュ テーブル、リスト、セット、順序付きセットなど、さまざまなデータ構造をサポートするオープン ソースのメモリ内データ構造ストレージ システムです。 Java アプリケーションでは Redis が広く使われていますが、この記事では Java での Redis の応用について詳しく紹介します。
1. Redis の基本概念
Redis は、文字列、ギリシャ語テーブル、リストの 5 つの基本データ構造をサポートします。 、セット、順序付きセット。文字列は Redis の最も基本的なデータ構造であり、Redis は文字列をバイナリ データとしてメモリに書き込みます。
Redis は、単純なキーと値のストレージ システムであるだけでなく、パブリッシュ/サブスクライブやトランザクション処理などの複数の高度な機能もサポートしています。 . およびその他の機能。一部の Redis コマンドは、さまざまなデータ構造と組み合わせて使用して、複雑なデータ モデルを作成することもできます。
Redis は、スナップショットとログ ファイルという 2 つの永続化方法を提供します。スナップショットとは、Redis メモリ内のすべてのデータをディスクに書き込むことを指し、ログ ファイルとは、Redis によって実行されたすべてのコマンドをログ ファイルに書き込むことを指します。再起動時に、Redis はディスクまたはログ ファイルからデータを復元します。
2. Java での Redis のアプリケーション
Redis の最も一般的なアプリケーション シナリオは、キャッシュとして使用することです。なぜなら、Redis はデータを素早く読み取る機能があるからです。頻繁にアクセスされるデータを Redis にキャッシュすると、データベースへの負担が軽減されます。
Redis を Java アプリケーションのキャッシュとして使用する手順は次のとおりです。
1) Redis クライアントを構成する
2) Redis クライアント接続を作成する
3) 使用するキャッシュとしての Redis
サンプル コードは次のとおりです。
// 配置Redis客户端 RedisClient redisClient = RedisClient.create("redis://localhost:6379"); StatefulRedisConnection<String, String> connection = redisClient.connect(); RedisCommands<String, String> redisCommands = connection.sync(); // 将Redis作为缓存使用 // 从Redis中获取数据 String value = redisCommands.get("key"); // 如果Redis中没有缓存,则从数据库中获取数据 if (value == null) { value = getDataFromDatabase(); // 将数据放入Redis中缓存 redisCommands.set("key", value); }
同期ロックを使用すると、同期ロック中の不整合の問題を回避できます。複数のスレッドによる同時アクセス。 Redis を分散ロックとして使用して、同期ロックの機能を実装できます。
Redis を使用して Java アプリケーションに同期ロックを実装する手順は次のとおりです。
1) Redis の SETNX コマンドを使用してロックします。
2) Redis の DELETE コマンドを使用して、処理後にロックを解放します。
サンプル コードは次のとおりです。
public class RedisLock { private static final String LOCK_KEY = "lock_key"; private static final int LOCK_VALUE = 1; private static final int DEFAULT_EXPIRE_TIME = 60000; // 默认过期时间为1分钟 private RedisCommands<String, String> redisCommands; public RedisLock(StatefulRedisConnection<String, String> connection) { this.redisCommands = connection.sync(); } // 锁定 public boolean lock() { Long result = redisCommands.setnx(LOCK_KEY, String.valueOf(LOCK_VALUE)); if (result > 0) { // 成功锁定 // 设置过期时间 redisCommands.pexpire(LOCK_KEY, DEFAULT_EXPIRE_TIME); return true; } return false; } // 释放锁 public void unlock() { redisCommands.del(LOCK_KEY); } }
Web アプリケーションでは、セッション管理は次のとおりです。重要なタスクです。 Redis をセッション ストレージとして使用すると、セキュリティとパフォーマンスが大幅に向上します。
Redis を使用して Java アプリケーションにセッション管理を実装する手順は次のとおりです。
1) Redis クライアントを構成する
2) Redis をサーブレット フィルターのセッション ストレージとして使用する
サンプル コードは次のとおりです:
public class RedisSessionFilter implements Filter { private RedisCommands<String, String> redisCommands; @Override public void init(FilterConfig filterConfig) throws ServletException { RedisClient redisClient = RedisClient.create("redis://localhost:6379"); StatefulRedisConnection<String, String> connection = redisClient.connect(); redisCommands = connection.sync(); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; String sessionId = request.getSession().getId(); // 通过sessionId从Redis中获取会话数据 String sessionData = redisCommands.get(sessionId); // 如果Redis中没有会话数据,则创建一个空会话 HttpSession session = request.getSession(); if (sessionData == null) { redisCommands.set(sessionId, ""); } else { session.setAttribute("sessionData", sessionData); } // 将请求传递给下一个过滤器或Servlet filterChain.doFilter(request, servletResponse); } @Override public void destroy() { redisCommands.getStatefulConnection().close(); } }
3. 概要
Redis は、広く使用されているメモリ データ構造ストレージ システムです。 Java アプリケーションでは、Redis はキャッシュ、同期ロック、セッション管理の実装としてよく使用されます。この記事では、Java アプリケーションにおける Redis のいくつかのアプリケーション シナリオのみを紹介します。読者は、特定のニーズに応じて Redis の使用法をさらに学ぶことができます。
以上がJavaでのRedisの応用を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。