Redisson
redisson と自己カプセル化の違いは次のとおりです (シナリオ):
- redisson がロックを取得しない場合、redisson はロックを取得するまで待機します。ロック。
- 他の 2 つのメソッドがロックを取得できない場合、それらは放棄され、ビジネス コードは実行されません。
-
<dependency> <groupid>org.redisson</groupid> <artifactid>redisson-spring-boot-starter</artifactid> <version>3.13.6</version></dependency>
@Autowiredprivate Redisson redisson;@GetMapping("/redissonLock")public String redissonLock() { log.info("进入了方法"); RLock lock = redisson.getLock("redissonLock"); try { lock.lock(30, TimeUnit.SECONDS); Thread.sleep(10000); System.out.println("我是你大哥"); } catch (InterruptedException e) { e.printStackTrace(); } finally { // 如果不释放,不会唤起其他线程,则其他线程会超时过期自动唤醒,不会执行业务代码 lock.unlock(); } return "运行结束";}
RedisTemplate は Redis ロックをカプセル化します (1)
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-data-redis</artifactid></dependency>
package com.util;import org.springframework.dao.DataAccessException;import org.springframework.data.redis.connection.RedisConnection;import org.springframework.data.redis.connection.RedisStringCommands;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.script.RedisScript;import org.springframework.data.redis.core.types.Expiration;import org.springframework.stereotype.Component;import java.util.Arrays;@Componentpublic class RedisLock { private static RedisTemplate redisTemplate; private static String script = "if redis.call(\"get\",KEYS[1]) == ARGV[1] then\n" + "\treturn redis.call(\"del\",KEYS[1])\n" + "else\n" + " \treturn 0\t\n" + "end "; public RedisLock(RedisTemplate redisTemplate) { RedisLock.redisTemplate = redisTemplate; } public static Boolean getLock(String key, String value, Long expireTime) { RedisStringCommands.SetOption setOption = RedisStringCommands.SetOption.ifAbsent(); Expiration expiration = Expiration.seconds(expireTime); RedisCallback<boolean> booleanRedisCallback = new RedisCallback<boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { return connection.set(redisTemplate.getKeySerializer().serialize(key), redisTemplate.getValueSerializer().serialize(value), expiration, setOption); } }; return (Boolean) redisTemplate.execute(booleanRedisCallback); } public static Boolean unLock(String key, String value) { RedisScript<boolean> redisScript = RedisScript.of(script, Boolean.class); return (Boolean) redisTemplate.execute(redisScript, Arrays.asList(key), value); }}</boolean></boolean></boolean>
@GetMapping("/redisLock")public String redisLock() { log.info("进入了方法"); String key = "redisLock"; String uuid = UUID.randomUUID().toString(); try { if (RedisLock.getLock(key, uuid, 30L)) { log.info("进入了锁"); Thread.sleep(10000); } } catch (InterruptedException e) { e.printStackTrace(); } finally { RedisLock.unLock(key, uuid); } log.info("方法执行完成"); return "程序结束";}
RedisTemplate は Redis ロックをカプセル化します (2)
package com.util;import lombok.extern.slf4j.Slf4j;import org.springframework.dao.DataAccessException;import org.springframework.data.redis.connection.RedisConnection;import org.springframework.data.redis.connection.RedisStringCommands;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.script.RedisScript;import org.springframework.data.redis.core.types.Expiration;import java.util.Arrays;import java.util.UUID;@Slf4jpublic class HighRedisLock implements AutoCloseable{ private RedisTemplate redisTemplate; private String key; private String value; private Long expireTime; private static String script = "if redis.call(\"get\",KEYS[1]) == ARGV[1] then\n" + "\treturn redis.call(\"del\",KEYS[1])\n" + "else\n" + " \treturn 0\t\n" + "end "; public HighRedisLock(RedisTemplate redisTemplate, String key, Long expireTime) { this.redisTemplate = redisTemplate; this.key = key; this.value = UUID.randomUUID().toString(); this.expireTime = expireTime; } public Boolean getLock() { RedisStringCommands.SetOption setOption = RedisStringCommands.SetOption.ifAbsent(); Expiration expiration = Expiration.seconds(expireTime); RedisCallback<boolean> booleanRedisCallback = new RedisCallback<boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { return connection.set(redisTemplate.getKeySerializer().serialize(key), redisTemplate.getValueSerializer().serialize(value), expiration, setOption); } }; return (Boolean) redisTemplate.execute(booleanRedisCallback); } public Boolean unLock() { RedisScript<boolean> redisScript = RedisScript.of(script, Boolean.class); return (Boolean) redisTemplate.execute(redisScript, Arrays.asList(key), value); } @Override public void close() throws Exception { unLock(); }}</boolean></boolean></boolean>
@Autowiredprivate RedisTemplate redisTemplate;@GetMapping("/highRedisLock")public String highRedisLock() { log.info("进入了方法"); try (HighRedisLock redisLock = new HighRedisLock(redisTemplate, "highRedisLock", 30L)) { if (redisLock.getLock()) { log.info("进入了锁"); Thread.sleep(10000); } } catch (InterruptedException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } log.info("方法执行完成"); return "程序结束";}
以上がRedis 分散ロックの導入の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Redisは、高速、汎用性、豊富なデータ構造のために際立っています。 1)Redisは、文字列、リスト、コレクション、ハッシュなどのデータ構造をサポートし、コレクションを注文します。 2)メモリを介してデータを保存し、RDBとAOFの持続性をサポートします。 3)Redis 6.0から始めて、マルチスレッドI/O操作が導入されました。これにより、高い並行性シナリオでパフォーマンスが向上しました。

redisisclassifiedsaNosqldatabasebasesakey-valuedataModelinsteaded ofthetraditionaldatabasemodel.itoffersspeedand andffficability、makingidealforreal-timeaplications andcaching、butmaynotbesbesutable fors cenariois requiring datientiantientioniity

Redisは、データをキャッシュし、分散ロックとデータの持続性を実装することにより、アプリケーションのパフォーマンスとスケーラビリティを向上させます。 1)キャッシュデータ:Redisを使用して頻繁にアクセスしたデータをキャッシュして、データアクセス速度を向上させます。 2)分散ロック:Redisを使用して分散ロックを実装して、分散環境での操作のセキュリティを確保します。 3)データの持続性:データの損失を防ぐために、RDBおよびAOFメカニズムを介してデータセキュリティを確保します。

Redisのデータモデルと構造には、5つの主要なタイプが含まれます。1。文字列:テキストまたはバイナリデータの保存に使用され、原子操作をサポートします。 2。リスト:キューとスタックに適した注文された要素コレクション。 3.セット:順序付けられていない一意の要素セット、セット操作をサポートします。 4。注文セット(sortedset):ランキングに適したスコアを持つ一意の要素セット。 5。ハッシュテーブル(ハッシュ):オブジェクトの保存に適したキー価値ペアのコレクション。

Redisのデータベースメソッドには、メモリ内データベースとキー価値ストレージが含まれます。 1)Redisはデータをメモリに保存し、速く読み取り、書き込みます。 2)キー価値のペアを使用してデータを保存し、キャッシュやNOSQLデータベースに適したリスト、コレクション、ハッシュテーブル、注文コレクションなどの複雑なデータ構造をサポートします。

Redisは、高速パフォーマンス、リッチデータ構造、高可用性とスケーラビリティ、持続性能力、幅広いエコシステムサポートを提供するため、強力なデータベースソリューションです。 1)非常に速いパフォーマンス:Redisのデータはメモリに保存され、非常に速い読み取り速度と書き込み速度が高く、高い並行性と低レイテンシアプリケーションに適しています。 2)豊富なデータ構造:さまざまなシナリオに適したリスト、コレクションなど、複数のデータ型をサポートします。 3)高可用性とスケーラビリティ:マスタースレーブの複製とクラスターモードをサポートして、高可用性と水平スケーラビリティを実現します。 4)持続性とデータセキュリティ:データの整合性と信頼性を確保するために、データの持続性がRDBとAOFを通じて達成されます。 5)幅広い生態系とコミュニティのサポート:巨大なエコシステムとアクティブなコミュニティにより、

Redisの主な機能には、速度、柔軟性、豊富なデータ構造のサポートが含まれます。 1)速度:Redisはメモリ内データベースであり、読み取り操作はほとんど瞬間的で、キャッシュとセッション管理に適しています。 2)柔軟性:複雑なデータ処理に適した文字列、リスト、コレクションなど、複数のデータ構造をサポートします。 3)データ構造のサポート:さまざまなビジネスニーズに適した文字列、リスト、コレクション、ハッシュテーブルなどを提供します。

Redisのコア関数は、高性能のメモリ内データストレージおよび処理システムです。 1)高速データアクセス:Redisはデータをメモリに保存し、マイクロ秒レベルの読み取り速度と書き込み速度を提供します。 2)豊富なデータ構造:文字列、リスト、コレクションなどをサポートし、さまざまなアプリケーションシナリオに適応します。 3)永続性:RDBとAOFを介してディスクにデータを持続します。 4)サブスクリプションを公開:メッセージキューまたはリアルタイム通信システムで使用できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
