RedisTemplateでRedisを操作する、この記事で十分です(a)
RedisTemplateでRedisを操作する、この記事一本で十分です(a)
StringRedisTemplateとRedisTemplateの違い(II)
StringRedisTemplateの小さな例(III)
記事の目次
-
- I. SpringDataRedis の紹介
- II. RedisTemplateでAPIを使用する
-
- 1. pom.xml 依存性
- 2, 設定ファイル
- 3. RedisTemplateのダイレクトメソッド
- 4. 文字列型関連操作
- 5. ハッシュ型関連操作
- 6. セットタイプ関連操作
- 7. LIST型関連操作
- 8. Zset 型の関連操作
-
-
- 1)、コレクションに要素を挿入し、スコアを設定します。
- 2) 複数の要素をセットに挿入し、スコアを設定する
- 3) 指定された区間の要素を小さいものから順に表示する(-1なら全て表示)
- 4) 指定された要素のスコアを取得する
- 5)、セットに含まれるメンバーの人数を返す
- 6), 指定した範囲の分数の集合に含まれる人数を返す(Double 型)。
- 7), 指定されたスコアの範囲内で、セット内の要素の順位を返す(小さいものから大きいものまで)。
- 8)、オフセットと数値で、(キー、開始スコア、最大スコア、オフセット、数値)。
- 9)、セット内の要素の順位とスコア(小さいものから大きいものまで)を返す。
- 10), 指定されたメンバーの順位を返す。
- 11)、コレクションから指定された要素を削除する
- 12), 指定されたインデックス範囲の要素を削除する(Long型)
- 13), 指定された分数範囲の要素を削除する(Double 型)
- 14), 指定された要素にポイントを追加する(Double 型)
-
I. SpringDataRedis の紹介
1. レディス
redisはメモリ上で動作するオープンソースのKey-Valueデータベースで、C言語で書かれています。エンタープライズ開発では、キャッシュを実装するためにRedisがよく使われます。類似の製品として、memcache、memcachedなどがあります。
2. ジェダイ
JedisはRedisの公式のJava指向クライアントで、Java言語が呼び出すための多くのインターフェイスを提供しています。Redisのウェブサイトからダウンロードできますが、Jredis、SRPなどのクライアントを提供しているオープンソースの愛好家もいます。Jedisをお勧めします。
3. Spring データ Redis
Spring-data-redisはspringファミリーの一部で、簡単な設定によりsrpingアプリケーションでredisサービスへのアクセスを提供します。基盤となるredis開発パッケージ(Jedis、JRedis、RJC)に高度にカプセル化されており、RedisTemplateはredis操作、例外処理、シリアライズ、リリースサブスクリプションのサポートが提供されます。RedisTemplateは、様々なredis操作、例外処理とシリアライゼーション、パブリッシュ・サブスクライブのサポート、spring3.1キャッシュの実装を提供します。
spring-data-redis は jedis に対して以下の機能を提供します。
- 高度にカプセル化されたRedisTemplateクラスによる自動接続プール管理。
- jedisクライアントの多数のapiを分類し、同じ種類の操作を操作インターフェースにカプセル化する
- ValueOperations:単純なK-V演算
- SetOperations:セット型データ操作
- ZSetOperations:Zsetタイプのデータ操作
- HashOperations: map 型のデータに対する操作
- ListOperations:リスト型のデータに対する操作
- キー操作のための "bound"(バインド)APIを提供します。指定したキーをboundでカプセル化し、再度キーを明示的に指定しなくても一連の操作を実行できる、すなわちBoundKeyOperationsを提供します。
- BoundValueOperations(バウンドバリューオペレーション
- BoundSetOperations
- BoundListOperations
- BoundSetOperations
- BoundHashOperations
- トランザクション操作をコンテナ制御でラッピングします。
- データのシリアライズ/デシリアライズのための複数のオプションストラテジーを提供する(RedisSerializer)
JdkSerializationRedisSerializerです。 POJOオブジェクトのアクセスシナリオは、JDK自体のシリアライゼーション機構を使用して、シリアライズ操作のためのObjectInputStream / ObjectOutputStreamを介してpojoクラスは、最終的にredis -サーバーは、バイトシーケンスを格納します。これは、はるかに最も一般的なシリアライズ戦略です。
StringRedisSerializerです。 キーまたは値が文字列の場合、データのバイト列を指定された charset に従って文字列にエンコードします。これは "new String(bytes, charset)" および "string.getBytes( charset)" の直接的なラッパーです。これは、最も軽量で効率的な方法です。
JacksonJsonRedisSerializerです。 jackson-json ツールは、redis に保存するために pojo インスタンスを json 形式にシリアライズしたり、json 形式のデータを pojo インスタンスに変換するために、javabean と json 間の変換機能を提供します。jacksonツールはシリアライズとデシリアライズの際にClassタイプを明示的に指定する必要があるため、この戦略はカプセル化が若干複雑になります。[jackson-mapper-aslツールのサポートが必要です。
II. RedisTemplateでAPIを使用する
1. pom.xml の依存関係
<! --Redis-->
org.springframework.boot</groupId>
spring-boot-starter-data-redis</artifactId>
</dependency>
# Redis server connection port
spring.redis.port=6379
# Redis server address
spring.redis.host=127.0.0.1
# Redis database index (default is 0)
spring.redis.database=0
# Redis server connection password (default is empty)
spring.redis.password=
# Maximum number of connections to the connection pool (use negative values to indicate no limit)
spring.redis.jedis.pool.max-active=8
# Maximum connection pool blocking wait time (use negative values to indicate no limit)
spring.redis.jedis.pool.max-wait=-1ms
# The maximum idle connections in the connection pool
spring.redis.jedis.pool.max-idle=8
# The minimum idle connections in the connection pool
spring.redis.jedis.pool.min-idle=0
# Connection timeout (milliseconds)
spring.redis.timeout=5000ms
2. 設定ファイル
@Autowired
private RedisTemplate redisTemplate;
3. RedisTemplateのダイレクトメソッド
まず@Autowiredを使ってRedisTemplateをインジェクトします(後で直接使うので特に指示はありません)
// Delete key
public void delete(String key){
redisTemplate.delete(key);
}
1. キーを1つ削除する
// Delete multiple keys
public void deleteKey (String ... . keys){
redisTemplate.delete(keys);
}
2. 複数キーの削除
// Specify the expiration time of the key
public void expire(String key,long time){
redisTemplate.expire(key,time,TimeUnit.MINUTES);
}
3. 鍵の有効期限を指定する
// Get the expiration time according to the key
public long getExpire(String key){
Long expire = redisTemplate.getExpire(key);
return expire;
}
4. キーに基づき有効期限を取得する
// Determine if the key exists or not
public boolean hasKey(String key){
return redisTemplate.hasKey(key);
}
//1, set the value via redisTemplate
redisTemplate.boundValueOps("StringKey").set("StringValue");
redisTemplate.boundValueOps("StringKey").set("StringValue",1, TimeUnit.MINUTES);
//2. Set the value by BoundValueOperations
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
stringKey.set("StringVaule");
stringKey.set("StringValue",1, TimeUnit.MINUTES);
//3. Set the value by ValueOperations
ValueOperations ops = redisTemplate.opsForValue();
ops.set("StringKey", "StringVaule");
ops.set("StringValue","StringVaule",1, TimeUnit.MINUTES);
redisTemplate.boundValueOps("StringKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("StringKey",1,TimeUnit.MINUTES);
//1, set the value via redisTemplate
String str1 = (String) redisTemplate.boundValueOps("StringKey").get();
//2. Get the value by BoundValueOperations
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
String str2 = (String) stringKey.get();
//3. Get the value by ValueOperations
ValueOperations ops = redisTemplate.opsForValue();
String str3 = (String) ops.get("StringKey");
Boolean result = redisTemplate.delete("StringKey");
redisTemplate.boundValueOps("StringKey").increment(3L);
redisTemplate.boundValueOps("StringKey").increment(-3L);
//1. Set the value via redisTemplate
redisTemplate.boundHashOps("HashKey").put("SmallKey", "HashVaue");
//2. Set the value by BoundValueOperations
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
hashKey.put("SmallKey", "HashVaue");
//3. Set the value by ValueOperations
HashOperations hashOps = redisTemplate.opsForHash();
hashOps.put("HashKey", "SmallKey", "HashVaue");
redisTemplate.boundValueOps("HashKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("HashKey",1,TimeUnit.MINUTES);
HashMap
4), set expiration time (set separately)
redisTemplate.boundValueOps("HashKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("HashKey",1,TimeUnit.MINUTES);
5), extract all small keys
//1. Get the values via redisTemplate
Set keys1 = redisTemplate.boundHashOps("HashKey").keys();
//2. Get the value by BoundValueOperations
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
Set keys2 = hashKey.keys();
//3. Get the value by ValueOperations
HashOperations hashOps = redisTemplate.opsForHash();
Set keys3 = hashOps.keys("HashKey");
6), extract all value values
//1. Get the values via redisTemplate
List values1 = redisTemplate.boundHashOps("HashKey").values();
//2. Get the values by BoundValueOperations
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
List values2 = hashKey.values();
//3. Get the values by ValueOperations
HashOperations hashOps = redisTemplate.opsForHash();
List values3 = hashOps.values("HashKey");
7), extract value value based on key
//1, get by redisTemplate
String value1 = (String) redisTemplate.boundHashOps("HashKey").get("SmallKey");
//2. Get the value by BoundValueOperations
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
String value2 = (String) hashKey.get("SmallKey");
//3. Get the value by ValueOperations
HashOperations hashOps = redisTemplate.opsForHash();
String value3 = (String) hashOps.get("HashKey", "SmallKey");
8), Get all the key-value pairs collection
//1. Get via redisTemplate
Map entries = redisTemplate.boundHashOps("HashKey").entries();
//2. Get the value by BoundValueOperations
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
Map entries1 = hashKey.entries();
//3. Get the value by ValueOperations
HashOperations hashOps = redisTemplate.opsForHash();
Map entries2 = hashOps.entries("HashKey");
9), Delete
//delete small key
redisTemplate.boundHashOps("HashKey").delete("SmallKey");
//delete the large key
redisTemplate.delete("HashKey");
10), determine if the value is in the Hash
Boolean isEmpty = redisTemplate.boundHashOps("HashKey").hasKey("SmallKey");
6、Set type related operations
1), add Set cache (value can be one or more) (2/3 is a recursive value of 1)
//1. Set the value via redisTemplate
redisTemplate.boundSetOps("setKey").add("setValue1", "setValue2", "setValue3");
//2. Set the value by BoundValueOperations
BoundSetOperations setKey = redisTemplate.boundSetOps("setKey");
setKey.add("setValue1", "setValue2", "setValue3");
//3. Set values by ValueOperations
SetOperations setOps = redisTemplate.opsForSet();
setOps.add("setKey", "SetValue1", "setValue2", "setValue3");
2), set expiration time (set separately)
redisTemplate.boundValueOps("setKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("setKey",1,TimeUnit.MINUTES);
3) Get all values in Set based on key
//1. Get the values via redisTemplate
Set set1 = redisTemplate.boundSetOps("setKey").members();
//2. Get the value through BoundValueOperations
BoundSetOperations setKey = redisTemplate.boundSetOps("setKey");
Set set2 = setKey.members();
//3. Get the value through ValueOperations
SetOperations setOps = redisTemplate.opsForSet();
Set set3 = setOps.members("setKey");
4), query from a set based on value, whether it exists
Boolean isEmpty = redisTemplate.boundSetOps("setKey").isMember("setValue2");
5), Get the length of the Set cache
Long size = redisTemplate.boundSetOps("setKey").size();
6), Remove the specified element
Long result1 = redisTemplate.boundSetOps("setKey").remove("setValue1");
7), remove the specified key
Boolean result2 = redisTemplate.delete("setKey");
7. LIST type related operations
1), add cache (2/3 is a recursive value of 1)
//1. Set the value via redisTemplate
redisTemplate.boundListOps("listKey").leftPush("listLeftValue1");
redisTemplate.boundListOps("listKey").rightPush("listRightValue2");
//2. Set the value by BoundValueOperations
BoundListOperations listKey = redisTemplate.boundListOps("listKey");
listKey.leftPush("listLeftValue3");
listKey.rightPush("listRightValue4");
//3. Set values by ValueOperations
ListOperations opsList = redisTemplate.opsForList();
opsList.leftPush("listKey", "listLeftValue5");
opsList.rightPush("listKey", "listRightValue6");
2), put List into cache
ArrayList
list = new ArrayList<>();
redisTemplate.boundListOps("listKey").rightPushAll(list);
redisTemplate.boundListOps("listKey").leftPushAll(list);
3), set expiration time (set separately)
redisTemplate.boundValueOps("listKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("listKey",1,TimeUnit.MINUTES);
4), get all contents of List cache (start index, end index)
List listKey1 = redisTemplate.boundListOps("listKey").range(0, 10);
5), pop up an element from the left or from the right
String listKey2 = (String) redisTemplate.boundListOps("listKey").leftPop(); //pop an element from the left
String listKey3 = (String) redisTemplate.boundListOps("listKey").rightPop(); //pop an element from the right side
6), query elements by index
String listKey4 = (String) redisTemplate.boundListOps("listKey").index(1);
7), Get the length of the List cache
Long size = redisTemplate.boundListOps("listKey").size();
8), modify a data in List according to index (key, index, value)
redisTemplate.boundListOps("listKey").set(3L,"listLeftValue3");
9), remove N values as value(key,remove number,value)
redisTemplate.boundListOps("listKey").remove(3L,"value");
8. Related operations of Zset type
1), insert elements into the set and set the score
//1. Set the value via redisTemplate
redisTemplate.boundZSetOps("zSetKey").add("zSetVaule", 100D);
//2. Set the value by BoundValueOperations
BoundZSetOperations zSetKey = redisTemplate.boundZSetOps("zSetKey");
zSetKey.add("zSetVaule", 100D);
//3. Set the value by ValueOperations
ZSetOperations zSetOps = redisTemplate.opsForZSet();
zSetOps.add("zSetKey", "zSetVaule", 100D);
2) Insert multiple elements into the collection, and set the score
DefaultTypedTuple
p1 = new DefaultTypedTuple<>("zSetVaule1", 2.1D);
DefaultTypedTuple
p2 = new DefaultTypedTuple<>("zSetVaule2", 3.3D);
redisTemplate.boundZSetOps("zSetKey").add(new HashSet<>(Arrays.asList(p1,p2)));
3) Print the elements in the specified interval in order of ranking (from smallest to largest), -1 is to print all
Set
range = redisTemplate.boundZSetOps("zSetKey").range(0, -1);
4), Get the score of the specified element
Double score = redisTemplate.boundZSetOps("zSetKey").score("zSetVaule");
5), return the number of members in the collection
Long size = redisTemplate.boundZSetOps("zSetKey").size();
6), return the number of members of the specified range of scores in the collection (Double type)
Long COUNT = redisTemplate.boundZSetOps("zSetKey").count(0D, 2.2D);
7), return the ranking of the elements in the set within the specified score range (from smallest to largest)
Set byScore = redisTemplate.boundZSetOps("zSetKey").rangeByScore(0D, 2.2D);
8), with offset and number, (key, starting score, max score, offset, number)
Set
ranking2 = redisTemplate.opsForZSet().rangeByScore("zSetKey", 0D, 2.2D 1, 3);
9), return the ranking of the elements in the collection, and the score (from smallest to largest)
Set
>
tuples = redisTemplate.boundZSetOps("zSetKey").rangeWithScores(0L, 3L);
for (TypedTuple
tuple : tuples) {
System.out.println(tuples.getValue() + " : " + tuple.getScore());
}ss
10), return the ranking of the specified member
//from smallest to largest
Long startRank = redisTemplate.boundZSetOps("zSetKey").rank("zSetVaule");
//from largest to smallest
Long endRank = redisTemplate.boundZSetOps("zSetKey").reverseRank("zSetVaule");
11), Delete the specified element from the collection
redisTemplate.boundZSetOps("zSetKey").remove("zSetVaule");
12), Delete the elements of the specified index range (Long type)
redisTemplate.boundZSetOps("zSetKey").removeRange(0L,3L);
13), Delete elements in the specified fraction range (Double type)
redisTemplate.boundZSetOps("zSetKey").removeRangeByScorssse(0D,2.2D);
14), add points to the specified element (Double type)
Double score = redisTemplate.boundZSetOps("zSetKey").incrementScore("zSetVaule",1.1D);
5. キーが存在するかどうかを判断する
redisTemplate.boundValueOps("HashKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("HashKey",1,TimeUnit.MINUTES);
4. 文字列型関連操作
1)、キャッシュの追加(2/3は1の再帰的値)
//1. Get the values via redisTemplate
Set keys1 = redisTemplate.boundHashOps("HashKey").keys();
//2. Get the value by BoundValueOperations
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
Set keys2 = hashKey.keys();
//3. Get the value by ValueOperations
HashOperations hashOps = redisTemplate.opsForHash();
Set keys3 = hashOps.keys("HashKey");
2)、有効期限を設定(別途設定)
//1. Get the values via redisTemplate
List values1 = redisTemplate.boundHashOps("HashKey").values();
//2. Get the values by BoundValueOperations
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
List values2 = hashKey.values();
//3. Get the values by ValueOperations
HashOperations hashOps = redisTemplate.opsForHash();
List values3 = hashOps.values("HashKey");
3)、キャッシュされた値を取得する(2/3は1の再帰的な値です)
//1, get by redisTemplate
String value1 = (String) redisTemplate.boundHashOps("HashKey").get("SmallKey");
//2. Get the value by BoundValueOperations
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
String value2 = (String) hashKey.get("SmallKey");
//3. Get the value by ValueOperations
HashOperations hashOps = redisTemplate.opsForHash();
String value3 = (String) hashOps.get("HashKey", "SmallKey");
4)、削除キー
//1. Get via redisTemplate
Map entries = redisTemplate.boundHashOps("HashKey").entries();
//2. Get the value by BoundValueOperations
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
Map entries1 = hashKey.entries();
//3. Get the value by ValueOperations
HashOperations hashOps = redisTemplate.opsForHash();
Map entries2 = hashOps.entries("HashKey");
5)、シーケンシャルインクリメンタル
//delete small key
redisTemplate.boundHashOps("HashKey").delete("SmallKey");
//delete the large key
redisTemplate.delete("HashKey");
6), 順番が下がる
Boolean isEmpty = redisTemplate.boundHashOps("HashKey").hasKey("SmallKey");
5. ハッシュ型関連操作
1)、キャッシュの追加(2/3は1の再帰的値)
//1. Set the value via redisTemplate
redisTemplate.boundSetOps("setKey").add("setValue1", "setValue2", "setValue3");
//2. Set the value by BoundValueOperations
BoundSetOperations setKey = redisTemplate.boundSetOps("setKey");
setKey.add("setValue1", "setValue2", "setValue3");
//3. Set values by ValueOperations
SetOperations setOps = redisTemplate.opsForSet();
setOps.add("setKey", "SetValue1", "setValue2", "setValue3");
2)、有効期限を設定(別途設定)
redisTemplate.boundValueOps("setKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("setKey",1,TimeUnit.MINUTES);
3)、Mapコレクションを追加する
//1. Get the values via redisTemplate
Set set1 = redisTemplate.boundSetOps("setKey").members();
//2. Get the value through BoundValueOperations
BoundSetOperations setKey = redisTemplate.boundSetOps("setKey");
Set set2 = setKey.members();
//3. Get the value through ValueOperations
SetOperations setOps = redisTemplate.opsForSet();
Set set3 = setOps.members("setKey");
Boolean isEmpty = redisTemplate.boundSetOps("setKey").isMember("setValue2");
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JAVAでRedisの5つのデータ構造を利用する方法
-
RedisTemplatを使った簡単な分散ロックの実装の話
-
redisプラグインbloom-filterをcentosにインストールする方法
-
Redis 高効率化の理由とデータ構造の解析
-
Redisデータ永続化技術解説
-
Redisによる携帯電話認証コード配信の模倣例
-
Redisの高同期スパイクを防ぐために、ソースコードソリューションを売られすぎ
-
SpringBootがRedisの分散ロックを利用して並行処理の問題を解決することについて
-
Redisの分散ロックについて簡単に説明します
-
インストール後、Redis-cliが動作しない(redis-cli: コマンドが見つからない)。