Spring-data-redis は、spring-data モジュールの redis のサポート部分であり、「SDR」と呼ばれます。これは、jedis クライアント API に基づいた高度なカプセル化と Spring コンテナーとの統合を提供します。 、jedis クライアントで十分です シンプルで軽量な spring-data-redis は「過剰設計」の疑いがあります。
jedis クライアントには、プログラミング実装において次の欠点があります。
1) 接続管理には自動化がなく、接続プールの設計には必要なコンテナーのサポートがありません。
2) jedis のクライアント API で受け入れられるデータ型は文字列とバイトであり、構造化データ (json、xml、pojo) のサポートには追加の操作が必要であるため、データ操作では「シリアル化」/「逆シリアル化」に注意する必要があります。 。
3) トランザクション操作は純粋にハードコーディングされています
4) pub/sub 関数には必要な設計パターンのサポートが欠けており、開発者は多大な注意を払う必要があります。
1. Redis の使用シナリオ
Redis は、ANSI C 言語で書かれたオープンソースのログタイプの Key-Value データベースで、ネットワークをサポートし、メモリベースで永続化でき、複数の言語で API を提供します。
日常のアプリケーションでは、データベースのボトルネックが最も発生する可能性が高いことは誰もが知っています。大量のデータと頻繁なクエリにより、ディスク IO パフォーマンスの制限により、プロジェクトのパフォーマンスがますます低下しています。
現時点では、メモリベースのキャッシュ フレームワークで多くの問題を解決できます。たとえば、Memcache、Redis などです。頻繁に使用されるデータの一部を読み取り用にキャッシュに入れると、データベースの負担が大幅に軽減されます。システムパフォーマンスの向上。実際、同じことが Hibernate と Mybatis の 2 次キャッシュにも当てはまります。メモリの高速な読み書き速度を利用して、ハードディスクのボトルネックを解決します。
2. redis
を構成して使用する applicationContext-dao.xml で次のように構成します:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
豆>
database.properties 構成文例:
redis.maxIdle=10
redis.maxActive=20
redis.maxWait=10000
redis.testOnBorrow=true
redis.host=192.168.1.76
redis.port=6379
redis.pass=password1
spring-data-redis は、jedis の開発者を使用するために非常に便利な、さまざまなシリアライザー ポリシーを提供します。 SDR は 4 つの内部配置シリアライザを提供します:
JdkSerializationRedisSerializer:JDK の順序化手段を使用します (シリアル化可能なインターフェイス、ObjectInputStrean、ObjectOutputStream)、データによる文字列ストリームの保存、POJO オブジェクトの保存景、JDK 本身順序化機構制の使用、pojo クラスによる ObjectInputStream/ObjectOutputStream による順序化操作、
現在最も一般的に使用されているシーケンスは、redis サーバーに保存されます。 StringRedisSerializer:文字列コード、データは文字列で保存されています、キーまたは値は文字列の環境、指定された文字セットに基づくデータの文字列配列はstring、“new String(bytes, charset)”および“string.getBytes(
これは、最も量の多い、高効率の戦略です。JacksonJsonRedisSerializer: json 形式のストレージ、jackson-json ツールは、javabean と json 間の変換機能を提供し、pojo インスタンスを json 形式にシリアル化して redis に保存したり、json 形式のデータを pojo インスタンスに変換したりできます。 Jackson ツールはシリアル化および逆シリアル化するときにクラス タイプを明示的に指定する必要があるため、この戦略のカプセル化は少し複雑になります。 [jackson-mapper-asl ツールのサポートが必要]
OxmSerializer: XML 形式のストレージ。Javabean を xml に変換する機能を提供します。現在利用可能なサードパーティ サポートには、jaxb、apache-xmlbeans が含まれます。redis に保存されるデータは xml ツールになります。ただし、この戦略を使用すると、プログラミングがより困難になり、最も効率的になるため、お勧めできません。 [spring-oxm モジュールのサポートが必要]
その中で、JdkSerializationRedisSerializer と StringRedisSerializer は最も基本的なシリアル化戦略であり、その中でも「JacksonJsonRedisSerializer」と「OxmSerializer」は文字列ストレージに基づいているため、より「高度な」シリアル化です (最終的には文字列の解析と Java オブジェクトの構築を使用します)。 JdkSerializationRedisSerializer と StringRedisSerializer は、「シリアル化とシリアル化」の最も基本的な戦略です。原則として、アプリケーションのアクセスと解析 (アプリケーションにはアプリ、Hadoop、その他のツールが含まれます) のために任意の形式でデータを保存できますが、「」の使用はまだ推奨されません。 JacksonJsonRedisSerializer」と「OxmSerializer」は、json であっても xml であっても、依然として String であるため、設計時に直接使用できます。データをサードパーティ ツールで解析する必要がある場合、データは JdkSerializationRedisSerializer ではなく StringRedisSerializer を使用する必要があります。
4 種類のシリアライザーを RedisTemplate で宣言する必要があります。デフォルトは「JdkSerializationRedisSerializer」です:
1) keySerializer: 通常の K-V 操作の場合、key
によって採用されるシリアル化戦略 2) valueSerializer: value
によって採用されるシリアル化戦略 3) hashKeySerializer: ハッシュ データ構造では、ハッシュキー# # のシリアル化戦略# 4) hashValueSerializer: ハッシュ値シリアル化戦略
いずれの場合も、key/hashKey には StringRedisSerializer を使用することをお勧めします。
spring-data-redis は、jedis に次の機能を提供します:
1. 接続プールの自動化管理、高度にカプセル化された「RedisTemplate」クラスを提供します
2. jedis クライアント内の多数の API を分類してカプセル化し、同じタイプの操作を操作インターフェイスにカプセル化しました。 ValueOperations: 単純な K-V 操作
コアコード:
パッケージ com.npf.dao.impl;
インポート com.npf.dao.StudentDao;
インポート com.npf.model.Student;
@リポジトリ
public class StudentDaoImpl implements StudentDao{
@Autowired
private RedisTemplate
@Resource(name="redisTemplate")
private HashOperations
public static final String STUDENT = 「学生」;
@オーバーライド
public void save(Student student) {
opsForHash.put(STUDENT,student.getId(),student);
}
@オーバーライド
public Student find(String id) {
学生 student = opsForHash.get(STUDENT, id);
帰国生。
}
@オーバーライド
public void delete(String id) {
opsForHash.delete(学生, id);
}
@オーバーライド
public void update(Student student) {
opsForHash.put(STUDENT,student.getId(),student);
}
@オーバーライド
公開リスト<学生> findAll() {
マップエントリ = opsForHash.entries(学生);
リスト<生徒> stuList = 新しい ArrayList
for(Entry
stuList.add(entry.getValue());
}
stuList を返します。
}
}
制御層代コード次のとおり:
パッケージ com.npf.controller;
import java.util.List;
java.util.UUID をインポートします。
org.springframework.beans.factory.annotation.Autowired をインポートします。
org.springframework.stereotype.Controller をインポートします。
org.springframework.ui.Model をインポートします。
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
インポート com.npf.model.Student;
インポート com.npf.service.StudentService;
@コントローラー
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping("/student/save")
public String saveStudent(Student student){
String id = UUID.randomUUID().toString();
System.out.println(id);
Student.setId(id);
StudentService.save(学生);
return 「リダイレクト:/student/find/all」;
}
@RequestMapping("/student/update")
public String updateStudent(Student student){
StudentService.update(学生);
return 「リダイレクト:/student/find/all」;
}
@RequestMapping("/student/to/save/form")
public String toSaveStudentForm(){
「保存」を返します。
}
@RequestMapping("/student/delete")
public String deleteStudent(@RequestParam("id") String id){
StudentService.delete(id);
return 「リダイレクト:/student/find/all」;
}
@RequestMapping("/student/to/update/form")
public String toUpdateStudentForm(@RequestParam("id") String id,Model model){
Student stu = studentService.find(id);
model.addAttribute("stu", stu);
「更新」を返します。
}
@RequestMapping("/student/find/all")
public String findStudents(Model モデル){
リスト<生徒> stuList = studentService.findAll();
model.addAttribute("stuList", stuList);
「リスト」を返します;
}
}
以上がRedis の構成と使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。