1.string型
データの追加/変更: キー値の設定
get key
複数のデータの追加/変更: mset key value key1 value1
mget key key1
##1-2 文字列型の増減操作指定された範囲内の値を増やすように値を設定します: incr キーのデフォルトは毎回 1 ずつ増加します | 新しい値が追加されるたびに incrby キーの値
データを設定します指定範囲を減らすには: decr key | decrby key value は新しい値を追加するのと同じです
アプリケーション シナリオ
データベース テーブル ID の主キーを制御し、データベース テーブルの主キー生成戦略を提供して、データ テーブルの主キーの一貫性を確保します。
有効期限の設定: setex キーの秒値
アプリケーション シナリオ
時間制限のある投票機能の実現: たとえば、WeChat 投票は 1 時間に 1 回行うことができます
ホットな実現情報: 例: eコマース 業界で人気の製品、ニュース Web サイトで人気のニュース
Weibo big V ホームページ 頻繁にアクセスするには、ファン、フォロワー、Weibo の数を随時更新する必要があります。これは高頻度の情報なので、redis の文字列型を利用することで解決できます

ユーザーの主キーと属性をキー値として、redis に big V のユーザー情報を設定します。導入事例です。

ここで、キーの命名規則について簡単に説明する必要があります: テーブル名 主キー 主キー値 フィールド: フィールド値。このようなルールに従って名前を付けることで、キーの値を非常に適切に管理できます。
別の方法を使用してこれを実現することもできます。これは、キーの後に構造体を直接続けることです。たとえば、

上記のどちらの方法でも、次のことが可能です。はい、最初の値は任意の値を簡単に管理できるのに対し、2 番目の値は毎回変更する必要があるというだけです。ビジネス シナリオに応じて、定期的に更新できます。
データの追加/変更: hset キー フィールド値
データの取得: hget キー フィールド |
hgetall キー
データの削除: hdel キー フィールド field1
複数のデータの追加/変更: hmset キー フィールド value field1 value1
##複数のデータの取得: hmget key field field1
テーブル内のフィールドの数を取得します: hlen key
テーブルにフィールドが存在するかどうかを取得します:hexists キー フィールド
2-2 ハッシュ型データの拡張操作
ハッシュ テーブル内のすべてのフィールド値を取得します: hkeys key
ハッシュ テーブル内のすべてのフィールド値を取得します。 hvals key
指定したフィールドの値を設定して、指定した範囲の値を増やします: hincrby key field increment
| hincrbyfloat キー フィールドの増分
この画像はインターネットから取得したもので、自家製ではありません。ショッピング カートのシーンをシミュレートしているだけです。

上の画像では、ショッピング カート内の情報が表示されています。 , これを処理するために Redis を使用します. ショッピング カートの実装。
これは、ショッピング カートの追加とショッピング カートの取得の実装です。キーの名前は、テーブル名、主キー、主キーの値です。

上記では、テーブル名、主キー、主キーの値という名前が付けられています。問題の 1 つは、製品情報のストレージに多くの重複が存在するため、製品を個別にハッシュする必要があることです。以下の図に示すように、ここでは製品 ID

のみを指定します。1 つは複数のフィールドを設定する方法、もう 1 つは直接 json として保存する方法です。情報が頻繁に変更されない場合は、json

を使用してメソッドhsetnx キー フィールドの値
を提供できます。存在する場合は追加されません。存在しない場合は追加されません。 、追加されます。この機能は、異なるユーザーが同じ商品を追加した場合に、上書きや無駄な操作を避けるために使用されます

データストレージ要件: 複数のデータを保存し、データのストレージスペースの順序を区別します。
必要なデータ構造: 1 つのストレージスペースに複数のデータを保存し、エントリの順序をデータを通じて反映できます
リスト型: 複数のデータを保存します。最下層は二重リンクリスト格納構造を使用して実装します。
データの追加/変更: lpush キー値 value1 |
rpush キー値 value1
データの取得: lrange キー start end
| lindex キー インデックス
| llen key
データの削除: rpop key
| lpop key

#3-2 リスト型データの拡張操作##指定された時間内にデータを取得および削除します: blpop key1 key2 timeout | brpop key1 key2 timeout
この関数の単純なケースを作成します。わかりやすい
#左側のターミナル コマンドを実行すると、削除されたデータが返されるまで 30 秒待機します。
右側の add コマンドが実行されます。 左側は削除されたデータを直接返します。

上記でリストの基本操作がわかりました。lpop キーまたは rpop キーを実行すると、do または右側から削除できますが、友人のサークルがビジネスを気に入ってキャンセルするシナリオがあります。途中からのデータです。ケースは以下のとおりです。
最初に a b c d
を list5 に追加し、次に c を削除します
確認すると、a b d だけが残ります

新しいストレージ要件: 大量のデータを保存し、クエリの利便性を高めるために効率を向上させます
必要なストレージ構造: 大量のデータを保存できる、効率的な内部ストレージメカニズム、クエリが簡単
set タイプ: ハッシュストレージ構造とまったく同じ、値ではなくキーのみを格納し (nil)、値の繰り返しは許可されません

追加/modify data:sadd キーメンバー member1
データの取得: smembers key
データの削除: srem key member1
コレクションデータの総量を取得: scard key
コレクションに指定したデータが含まれているかどうかを判定: sismember key member

セット内の指定された数のデータをランダムに取得します: srandmember key count
コレクション内の特定のデータをランダムに取得し、コレクションから新しいデータ セットを削除します: spop key
話題の情報、話題のニュース、売れ筋旅行、アプリアプリのレコメンド、フォローレコメンドなどをランダムにプッシュ.
Kaka は最近ディスカスを書いているため、このケースは注意喚起を達成するために使用されます。
ケース 1: 特定の推奨メカニズムに従って対応するユーザーをセットに格納し、毎回推奨する必要がある 2 人のユーザーをランダムに取得します
ケース 2: 特定の推奨メカニズムに従ってセットに対応するユーザーを保存し、日付に基づいて毎日推奨されるユーザーを繰り返すことはできません

交差点、和集合、および差集合
sinter key key1
sunion key key1
sdiff key key1
2 つの集合の積集合、和集合、および差集合は、指定された集合に格納されます
sinterstore destination key1 key2
sunionstore destination key1 key2
sdiffstore destination key1 key2

案例:我们需要挖掘一个信息的共同好友。例如微信公众号的共同关注好友数量、QQ添加新好友的推荐机制、深度挖掘用户直接的联系
就根据上述案例,我们可以使用差集来实现qq的有可能认识的好友。
PV直接使用string类型的incr统计即可
UV和IP都是独立不重复的,使用set来操作。
在上边我们知道set有一个特性就是不能重复,我们就可以根据这一点来轻松实现这个功能。然后使用scard key 来统计数量。
独立訪問者としての UV については、ローカル Cookie を使用してそれを実現できます。同様に、記録のために Cookie を Redis に渡します

前の 4 つのタイプはいずれも並べ替えをサポートしていません。以下で説明するsorted_set タイプは、ビッグ データのストレージと並べ替えの両方をサポートしています。 function
データの追加:zadd キー スコア メンバー
データの取得: zrange キー スタート ストップ | zrevrange キー スタート ストップ
データの削除: zrem キー メンバー

条件に基づいてデータを取得: zrangebyscore キーの最小最大制限| zrevrangescore key max min
データの条件付き削除: zremrangebyrank key start stop | zremrangebyscore key min max
## コレクション データの総量を取得します: zcard key | zcount key min max
交差部分と操作を設定します: zinterstore destination numkeys key | zunionstore destination numkeys key
(このコマンドは実演しません。ドキュメントを自分で確認できます。これは set と似ていますが、次の点が異なります。すべての交差の合計が加算されます。次に、numkeys があります。このパラメータは、計算に必要なキーの合計数です。必要なキーの数は後で必要になります)
対応するインデックスを取得しますデータへ:zrank キー メンバー | zrevrank キー メンバー
socre 値の取得と変更: zscore キー メンバー | Zincrby キー インクリメント メンバー
上記は、redis データ型の簡単な紹介と具体的なアプリケーションです。次の記事では、実際の戦闘は特定のニーズに基づいて実行されます。
指定された範囲内の値を増やすように値を設定します: incr キーのデフォルトは毎回 1 ずつ増加します | 新しい値が追加されるたびに incrby キーの値
データを設定します指定範囲を減らすには: decr key | decrby key value は新しい値を追加するのと同じです
アプリケーション シナリオ
データベース テーブル ID の主キーを制御し、データベース テーブルの主キー生成戦略を提供して、データ テーブルの主キーの一貫性を確保します。
setex キーの秒値
アプリケーション シナリオ
時間制限のある投票機能の実現: たとえば、WeChat 投票は 1 時間に 1 回行うことができます
ホットな実現情報: 例: eコマース 業界で人気の製品、ニュース Web サイトで人気のニュース
Weibo big V ホームページ 頻繁にアクセスするには、ファン、フォロワー、Weibo の数を随時更新する必要があります。これは高頻度の情報なので、redis の文字列型を利用することで解決できます
ユーザーの主キーと属性をキー値として、redis に big V のユーザー情報を設定します。導入事例です。
ここで、キーの命名規則について簡単に説明する必要があります: テーブル名 主キー 主キー値 フィールド: フィールド値。このようなルールに従って名前を付けることで、キーの値を非常に適切に管理できます。
別の方法を使用してこれを実現することもできます。これは、キーの後に構造体を直接続けることです。たとえば、
上記のどちらの方法でも、次のことが可能です。はい、最初の値は任意の値を簡単に管理できるのに対し、2 番目の値は毎回変更する必要があるというだけです。ビジネス シナリオに応じて、定期的に更新できます。
hset キー フィールド値
hget キー フィールド |
hgetall キー
hdel キー フィールド field1
複数のデータの追加/変更: hmset キー フィールド value field1 value1
hmget key field field1
hlen key
hexists キー フィールド
2-2 ハッシュ型データの拡張操作
ハッシュ テーブル内のすべてのフィールド値を取得します: hkeys key
ハッシュ テーブル内のすべてのフィールド値を取得します。 hvals key
指定したフィールドの値を設定して、指定した範囲の値を増やします: hincrby key field increment
| hincrbyfloat キー フィールドの増分
この画像はインターネットから取得したもので、自家製ではありません。ショッピング カートのシーンをシミュレートしているだけです。
上の画像では、ショッピング カート内の情報が表示されています。 , これを処理するために Redis を使用します. ショッピング カートの実装。
これは、ショッピング カートの追加とショッピング カートの取得の実装です。キーの名前は、テーブル名、主キー、主キーの値です。
上記では、テーブル名、主キー、主キーの値という名前が付けられています。問題の 1 つは、製品情報のストレージに多くの重複が存在するため、製品を個別にハッシュする必要があることです。以下の図に示すように、ここでは製品 ID
のみを指定します。1 つは複数のフィールドを設定する方法、もう 1 つは直接 json として保存する方法です。情報が頻繁に変更されない場合は、json
を使用してメソッドhsetnx キー フィールドの値
を提供できます。存在する場合は追加されません。存在しない場合は追加されません。 、追加されます。この機能は、異なるユーザーが同じ商品を追加した場合に、上書きや無駄な操作を避けるために使用されます
データストレージ要件: 複数のデータを保存し、データのストレージスペースの順序を区別します。
必要なデータ構造: 1 つのストレージスペースに複数のデータを保存し、エントリの順序をデータを通じて反映できます
リスト型: 複数のデータを保存します。最下層は二重リンクリスト格納構造を使用して実装します。
lpush キー値 value1 |
rpush キー値 value1
データの取得: lrange キー start end
| lindex キー インデックス
| llen key
データの削除: rpop key
| lpop key
#3-2 リスト型データの拡張操作##指定された時間内にデータを取得および削除します: blpop key1 key2 timeout | brpop key1 key2 timeout
この関数の単純なケースを作成します。わかりやすい
#左側のターミナル コマンドを実行すると、削除されたデータが返されるまで 30 秒待機します。
右側の add コマンドが実行されます。 左側は削除されたデータを直接返します。

上記でリストの基本操作がわかりました。lpop キーまたは rpop キーを実行すると、do または右側から削除できますが、友人のサークルがビジネスを気に入ってキャンセルするシナリオがあります。途中からのデータです。ケースは以下のとおりです。
最初に a b c d
を list5 に追加し、次に c を削除します
確認すると、a b d だけが残ります

新しいストレージ要件: 大量のデータを保存し、クエリの利便性を高めるために効率を向上させます
必要なストレージ構造: 大量のデータを保存できる、効率的な内部ストレージメカニズム、クエリが簡単
set タイプ: ハッシュストレージ構造とまったく同じ、値ではなくキーのみを格納し (nil)、値の繰り返しは許可されません

追加/modify data:sadd キーメンバー member1
データの取得: smembers key
データの削除: srem key member1
コレクションデータの総量を取得: scard key
コレクションに指定したデータが含まれているかどうかを判定: sismember key member

セット内の指定された数のデータをランダムに取得します: srandmember key count
コレクション内の特定のデータをランダムに取得し、コレクションから新しいデータ セットを削除します: spop key
話題の情報、話題のニュース、売れ筋旅行、アプリアプリのレコメンド、フォローレコメンドなどをランダムにプッシュ.
Kaka は最近ディスカスを書いているため、このケースは注意喚起を達成するために使用されます。
ケース 1: 特定の推奨メカニズムに従って対応するユーザーをセットに格納し、毎回推奨する必要がある 2 人のユーザーをランダムに取得します
ケース 2: 特定の推奨メカニズムに従ってセットに対応するユーザーを保存し、日付に基づいて毎日推奨されるユーザーを繰り返すことはできません

交差点、和集合、および差集合
sinter key key1
sunion key key1
sdiff key key1
2 つの集合の積集合、和集合、および差集合は、指定された集合に格納されます
sinterstore destination key1 key2
sunionstore destination key1 key2
sdiffstore destination key1 key2

案例:我们需要挖掘一个信息的共同好友。例如微信公众号的共同关注好友数量、QQ添加新好友的推荐机制、深度挖掘用户直接的联系
就根据上述案例,我们可以使用差集来实现qq的有可能认识的好友。
PV直接使用string类型的incr统计即可
UV和IP都是独立不重复的,使用set来操作。
在上边我们知道set有一个特性就是不能重复,我们就可以根据这一点来轻松实现这个功能。然后使用scard key 来统计数量。
独立訪問者としての UV については、ローカル Cookie を使用してそれを実現できます。同様に、記録のために Cookie を Redis に渡します

前の 4 つのタイプはいずれも並べ替えをサポートしていません。以下で説明するsorted_set タイプは、ビッグ データのストレージと並べ替えの両方をサポートしています。 function
データの追加:zadd キー スコア メンバー
データの取得: zrange キー スタート ストップ | zrevrange キー スタート ストップ
データの削除: zrem キー メンバー

条件に基づいてデータを取得: zrangebyscore キーの最小最大制限| zrevrangescore key max min
データの条件付き削除: zremrangebyrank key start stop | zremrangebyscore key min max
## コレクション データの総量を取得します: zcard key | zcount key min max
交差部分と操作を設定します: zinterstore destination numkeys key | zunionstore destination numkeys key
(このコマンドは実演しません。ドキュメントを自分で確認できます。これは set と似ていますが、次の点が異なります。すべての交差の合計が加算されます。次に、numkeys があります。このパラメータは、計算に必要なキーの合計数です。必要なキーの数は後で必要になります)
対応するインデックスを取得しますデータへ:zrank キー メンバー | zrevrank キー メンバー
socre 値の取得と変更: zscore キー メンバー | Zincrby キー インクリメント メンバー
上記は、redis データ型の簡単な紹介と具体的なアプリケーションです。次の記事では、実際の戦闘は特定のニーズに基づいて実行されます。
指定された時間内にデータを取得および削除します: blpop key1 key2 timeout | brpop key1 key2 timeout
この関数の単純なケースを作成します。わかりやすい
#左側のターミナル コマンドを実行すると、削除されたデータが返されるまで 30 秒待機します。
右側の add コマンドが実行されます。 左側は削除されたデータを直接返します。
最初に a b c d
を list5 に追加し、次に c を削除します
確認すると、a b d だけが残ります
新しいストレージ要件: 大量のデータを保存し、クエリの利便性を高めるために効率を向上させます
必要なストレージ構造: 大量のデータを保存できる、効率的な内部ストレージメカニズム、クエリが簡単
set タイプ: ハッシュストレージ構造とまったく同じ、値ではなくキーのみを格納し (nil)、値の繰り返しは許可されません
追加/modify data:sadd キーメンバー member1
データの取得: smembers key
データの削除: srem key member1
コレクションデータの総量を取得: scard key
コレクションに指定したデータが含まれているかどうかを判定: sismember key member
セット内の指定された数のデータをランダムに取得します: srandmember key count
コレクション内の特定のデータをランダムに取得し、コレクションから新しいデータ セットを削除します: spop key
ケース 1: 特定の推奨メカニズムに従って対応するユーザーをセットに格納し、毎回推奨する必要がある 2 人のユーザーをランダムに取得します
ケース 2: 特定の推奨メカニズムに従ってセットに対応するユーザーを保存し、日付に基づいて毎日推奨されるユーザーを繰り返すことはできません
sinter key key1 sunion key key1 sdiff key key1
sinterstore destination key1 key2 sunionstore destination key1 key2 sdiffstore destination key1 key2
案例:我们需要挖掘一个信息的共同好友。例如微信公众号的共同关注好友数量、QQ添加新好友的推荐机制、深度挖掘用户直接的联系
就根据上述案例,我们可以使用差集来实现qq的有可能认识的好友。
PV直接使用string类型的incr统计即可
UV和IP都是独立不重复的,使用set来操作。
在上边我们知道set有一个特性就是不能重复,我们就可以根据这一点来轻松实现这个功能。然后使用scard key 来统计数量。
独立訪問者としての UV については、ローカル Cookie を使用してそれを実現できます。同様に、記録のために Cookie を Redis に渡します
前の 4 つのタイプはいずれも並べ替えをサポートしていません。以下で説明するsorted_set タイプは、ビッグ データのストレージと並べ替えの両方をサポートしています。 function
データの追加:zadd キー スコア メンバー
データの取得: zrange キー スタート ストップ | zrevrange キー スタート ストップ
データの削除: zrem キー メンバー
条件に基づいてデータを取得: zrangebyscore キーの最小最大制限| zrevrangescore key max min
データの条件付き削除: zremrangebyrank key start stop | zremrangebyscore key min max
## コレクション データの総量を取得します: zcard key | zcount key min max
交差部分と操作を設定します: zinterstore destination numkeys key | zunionstore destination numkeys key
(このコマンドは実演しません。ドキュメントを自分で確認できます。これは set と似ていますが、次の点が異なります。すべての交差の合計が加算されます。次に、numkeys があります。このパラメータは、計算に必要なキーの合計数です。必要なキーの数は後で必要になります)
対応するインデックスを取得しますデータへ:zrank キー メンバー | zrevrank キー メンバー
socre 値の取得と変更: zscore キー メンバー | Zincrby キー インクリメント メンバー
上記は、redis データ型の簡単な紹介と具体的なアプリケーションです。次の記事では、実際の戦闘は特定のニーズに基づいて実行されます。
以上がRedis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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)サブスクリプションを公開:メッセージキューまたはリアルタイム通信システムで使用できます。

Redisは、次のようなさまざまなデータ構造をサポートしています。1。文字列、単一価値データの保存に適しています。 2。キューやスタックに適したリスト。 3.非重複データの保存に使用されるセット。 4。ランキングリストと優先キューに適した注文セット。 5。オブジェクトまたは構造化されたデータの保存に適したハッシュテーブル。

Redisカウンターは、Redisキー価値ペアストレージを使用して、カウンターキーの作成、カウントの増加、カウントの減少、カウントのリセット、およびカウントの取得など、カウント操作を実装するメカニズムです。 Redisカウンターの利点には、高速速度、高い並行性、耐久性、シンプルさと使いやすさが含まれます。ユーザーアクセスカウント、リアルタイムメトリック追跡、ゲームのスコアとランキング、注文処理などのシナリオで使用できます。

Redisコマンドラインツール(Redis-Cli)を使用して、次の手順を使用してRedisを管理および操作します。サーバーに接続し、アドレスとポートを指定します。コマンド名とパラメーターを使用して、コマンドをサーバーに送信します。ヘルプコマンドを使用して、特定のコマンドのヘルプ情報を表示します。 QUITコマンドを使用して、コマンドラインツールを終了します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

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