1. シングルポイント Redis の問題
1. データ損失の問題
Redis データの永続性。
2. 同時実行性の問題
私たちのマスター/スレーブ クラスターは、読み取りと書き込みの分離を実現します。
3. 障害回復の問題
Redis Sentinel を使用して、正常性の検出と自動回復を実装します。
4. ストレージ容量の問題
シャード クラスターを構築し、スロット メカニズムを使用して動的な拡張を実現します。
2. RDB
RDB の正式名は、Redis データベース バックアップ ファイル (Redis データ バックアップ ファイル) で、Redis データ スナップショットとも呼ばれます。簡単に言うと、メモリ内のすべてのデータがディスクに記録されます。 Redis インスタンスに障害が発生して再起動すると、スナップショット ファイルがディスクから読み取られ、データが復元されます。
スナップショット ファイルは RDB ファイルと呼ばれ、デフォルトでは現在の実行ディレクトリに保存されます。
Redis 内に RDB をトリガーするメカニズムがあり、これは redis.conf ファイルにあります。形式は次のとおりです。 bgsaveコマンドを実行するとforkが渡され、メインプロセスとメモリデータを共有する子プロセスが生成されます。フォークが完了したら、メモリ データを読み取り、RDB ファイルに書き込みます。
Fork はコピーオンライト テクノロジを使用します:
- メインプロセスが書き込み操作を実行するとき、データのコピーをコピーして書き込み操作を実行します;
- RDB モード bgsave の基本プロセス?
- 子プロセスはメモリ データを読み取り、新しいデータを書き込みます。 RDB ファイル;
- 古い RDB ファイルを新しい RDB ファイルに置き換えます;
- RDB はいつ使用されますか処刑されるのか? 60 1000 を節約とはどういう意味ですか?
- は、60 秒以内に少なくとも 1000 件の変更が実行された場合に RDB がトリガーされることを意味します。
- RDB の欠点?
- fork サブプロセス、圧縮、書き込み RDB ファイルのエクスポートには時間がかかります;
- AOF コマンド記録の頻度は、redis.conf ファイルを通じて構成することもできます: 3. AOF
AOF コマンド記録の頻度も変更できます。 redis.conf を介して渡される 一致するファイル:
構成項目
欠点 | ##常に | #同期ディスクフラッシュ##高い信頼性、データ損失はほとんどなし | ##素晴らしいパフォーマンスへの影響||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
毎秒 | フラッシュ ディスク/秒 | 中程度のパフォーマンス | 最大 1 分間のデータ損失 | |||||||||||||||||||||
no | オペレーティング システム制御 | 最高のパフォーマンス | 信頼性が低く、大量のデータが失われる可能性があります | |||||||||||||||||||||
## これは記録コマンドであるため、AOF ファイルは RDB ファイルよりもはるかに大きくなります。 AOF は同じキーに対する複数の書き込み操作を記録しますが、意味があるのはそれらのうちの最後の書き込み操作のみです。 bgrewriteaof コマンドを使用すると、最小限のコマンドで AOF ファイルの書き換え機能を完了できます。 set id 1 set name nezha set id 2 bgrewriteaof mset name nezha id 2 Redis は、しきい値がトリガーされると、AOF ファイルを自動的に書き換えます。しきい値は redis.conf で構成することもできます:
RDB と AOF にはそれぞれ長所と短所があります。データ セキュリティ要件が高い場合、この 2 つは実際の開発ではこれらを組み合わせて利用することが多いです。
1. フラッシュ セールの手順:
public Result seckillVoucher(Long voucherId) { Long userId = UserHolder.getUser().getId(); long orderId = redisIdWorker.nextId("order"); // 1.执行lua脚本 Long result = stringRedisTemplate.execute( SECKILL_SCRIPT, Collections.emptyList(), voucherId.toString(), userId.toString(), String.valueOf(orderId) ); int r = result.intValue(); // 2.判断结果是否为0 if (r != 0) { // 2.1.不为0 ,代表没有购买资格 return Result.fail(r == 1 ? "库存不足" : "不能重复下单"); } // 3.返回订单id return Result.ok(orderId); } 5. スレッド プールを通じて、ブロッキング キューを操作します// 线程池 private static final ExecutorService SECKILL_ORDER_EXECUTOR = Executors.newSingleThreadExecutor(); /** * 在类初始化完成后执行 */ @PostConstruct private void init() { SECKILL_ORDER_EXECUTOR.submit(new VoucherOrderHandler()); } // 阻塞队列 private BlockingQueue<VoucherOrder> orderTasks = new ArrayBlockingQueue<>(1024 * 1024); private class OrderHandler implements Runnable{ @Override public void run() { while (true){ try { doSomething(); } catch (Exception e) { log.error("处理订单异常", e); } } } } 5. Redis に基づいて共有セッション ログインを実装しますセッションに基づくログイン
public class RefreshTokenInterceptor implements HandlerInterceptor { private StringRedisTemplate stringRedisTemplate; public RefreshTokenInterceptor(StringRedisTemplate stringRedisTemplate) { this.stringRedisTemplate = stringRedisTemplate; } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 1、获取请求头中的token String token = request.getHeader("authorization"); if (StrUtil.isBlank(token)) { return true; } // 2、基于TOKEN获取redis中的用户 String key = LOGIN_USER_KEY + token; Map<Object, Object> userMap = stringRedisTemplate.opsForHash().entries(key); // 3、判断用户是否存在 if (userMap.isEmpty()) { return true; } // 5、将查询到的hash数据转为UserDTO UserDTO userDTO = BeanUtil.fillBeanWithMap(userMap, new UserDTO(), false); // 6、存在,保存用户信息到 ThreadLocal UserHolder.saveUser(userDTO); // 7、刷新token有效期 stringRedisTemplate.expire(key, LOGIN_USER_TTL, TimeUnit.MINUTES); // 8、放行 return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 移除用户 UserHolder.removeUser(); } } |
以上がRedis分散キャッシュとフラッシュセールを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

他のデータベースと比較して、Redisには次の独自の利点があります。1)非常に速い速度、および読み取り操作は通常、マイクロ秒レベルにあります。 2)豊富なデータ構造と操作をサポートします。 3)キャッシュ、カウンター、公開サブスクリプションなどの柔軟な使用シナリオ。 Redisまたはその他のデータベースを選択する場合、特定のニーズとシナリオに依存します。 Redisは、高性能および低遅延のアプリケーションでうまく機能します。

Redisは、データストレージと管理において重要な役割を果たしており、複数のデータ構造と持続性メカニズムを通じて最新のアプリケーションの中核となっています。 1)Redisは、文字列、リスト、コレクション、注文されたコレクション、ハッシュテーブルなどのデータ構造をサポートし、キャッシュや複雑なビジネスロジックに適しています。 2)RDBとAOFの2つの持続方法を通じて、Redisは信頼できるストレージとデータの迅速な回復を保証します。

Redisは、大規模なデータの効率的なストレージとアクセスに適したNOSQLデータベースです。 1.Redisは、複数のデータ構造をサポートするオープンソースメモリデータ構造ストレージシステムです。 2.キャッシュ、セッション管理などに適した、非常に速い読み取り速度と書き込み速度を提供します。 4.使用例には、基本的なキー値ペア操作と高度なコレクション重複排除関数が含まれます。 5.一般的なエラーには、接続の問題、データ型の不一致、メモリオーバーフローが含まれるため、デバッグに注意する必要があります。 6.パフォーマンス最適化の提案には、適切なデータ構造の選択とメモリ排除戦略の設定が含まれます。

現実世界でのRedisのアプリケーションには、1。キャッシュシステムとして、データベースクエリを加速し、2。Webアプリケーションのセッションデータを保存するには、3。リアルタイムランキングを実装する4。メッセージ配信をメッセージキューとして簡素化する。 Redisの汎用性と高性能により、これらのシナリオで輝きます。

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。ハッシュテーブル(ハッシュ):オブジェクトの保存に適したキー価値ペアのコレクション。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
