目次
5. Spring Data Redis (強調 *****)
1. 基本概念:
1.Redisの紹介:
Redisはメモリ キー = 値構造に基づくデータベースです
ポート番号: 6379
2. 主な機能:
1.メモリストレージ、高い読み書き性能 - Redisの読み取り速度は110,000回/秒
2.構造化データベース とも呼ばれる豊富な種類の値 (5 つのデータ型) を格納します。NoSQL
3. 常に変化しないホットなデータ(商品、情報、ニュース)の保存に適している
3.NoSQLの紹介
NoSQL (Not Only SQL) は単なる SQL ではなく、一般的に ==非リレーショナル データベース==を指します。
リレーショナル データベース (Mysql、Oracle など)
アドバンテージ:
1. 保守が容易: すべてテーブル構造と統一フォーマットを使用
2. 使いやすい: SQL 言語は普遍的です
3. マルチテーブル クエリ: 1 つのテーブルまたは複数のテーブル間の非常に複雑なクエリに使用できます。
欠点:
1.ハードディスクに保存されるため、読み書きの能力は比較的低い
2. テーブル構造が固定されている、柔軟性が低い
3. 高い同時読み取りおよび書き込み要件、ハードディスク I/O が大きなボトルネック
非リレーショナル データベース (redis、MongoDB など)
アドバンテージ:
1. 柔軟な形式: 格納されたデータの形式は、キー、値、およびその他のアプリケーション シナリオにすることができます。
2.高速:nosqlは、ハードディスクの代わりにハードディスクまたはメモリをキャリアとして使用できます。
3. 低コスト: nosql データベースの導入はシンプルで、基本的に無料です。
欠点:
1. SQL サポートを提供せず、学習と使用のコストが比較的高くなります。
2. 通常はトランザクション処理なし
3.複雑なクエリの欠如
1.Redisのインストールと起動
ダウンロード
Reids 公式ウェブサイトアドレス: Redis
中国の Web サイト アドレス: Redis 中国の Web サイト
ディレクトリ構造
ディレクトリまたはファイル | 効果 |
---|---|
redis-ベンチマーク | パフォーマンス テスト ツール |
redis-check-aof | AOF ファイル修復ツール |
redis チェックダンプ | RDB ファイル チェック ツール (スナップショット永続ファイル) |
redis-cli | コマンド ライン クライアント |
redis サーバー | Redis サーバーを起動する |
redis.windows.conf | redis コア構成ファイル |
サービスを開始します。
コマンド ラインを開始します。
3. Redis コマンド (強調)
Redis データ構造
Redis uses key-value pair storage. (キー) キー タイプは文字列のみであり、(値) 値は 5 つのデータ タイプをサポートします。
文字列: 文字列
ハッシュ: HashMap
二重リンク リスト: LinkedList
順序付けられていないコレクション: HashSet
順序付きコレクション: LinkedHashSet
1.ひもひも(強調)
文字列型は Redis の最も基本的なデータ ストレージ型です
* セットキー値
を追加 * クエリ 取得キー* デルキーを削除
* (検証コード) を追加する際の有効期限を設定する setex key second value
* 残り時間を確認する ttl key
* キーによってレコードが存在するかどうかを判断する exists key 0: 存在しない 1: 存在する
2.ハッシュハッシュ(強調)
Hash 型は Java の Map に非常に似ており、キーと値のペアのグループを値に格納できます。
この型は、オブジェクトに関する情報を Java に格納するのに非常に適しています。
* hset キー hkey hvalue の追加
* すべての hgetall キーの
単一の hget キー hkey の クエリ * 削除
単一の値キーを削除する hdel キー hkey
redis キーを削除する del キー
* すべての hkey hkeys キーを取得する
* すべての hvalue hvals キーを取得する
*
左プッシュ
lpush キー値を追加
右プッシュ
rpush キー値
* リスト長
llen キー
* クエリ要素
lrange キー [開始インデックス 終了インデックス]
0 -1
* 要素を削除
左ポップアップ
lpop キー
右ポップアップ
rpop キー
3.セットコレクション
Set 型の最下層はハッシュ テーブルです。内部の要素は順序付けられておらず、繰り返し不可能です
*
sadd キー値の追加
* コレクション数の
scard キーの クエリ
* 要素
smembers キーのクエリ
* 要素
srem キー値の削除
4.ZSet コレクション
Zset は sortedSet とも呼ばれ、Set に基づいて順序付き関数を追加します. 要素を追加するときに、スコアを指定することができ、このスコアに従ってソートされます.
*
zadd キーのスコア値を追加
* クエリ
の昇順の
zrange キー [開始インデックスの終了インデックス] [withscores]
降順の
zrevrange キー [開始インデックスの終了インデックス] [withscores]*
zrem キー値を削除
共通コマンド
* ファジー クエリ キー
キー ** 削除キー 削除
キー....* キーに応じて値の型の
キーを決定します* データベースを選択
0~15 を選択* 現在のデータベースをクリアする
flushdb* すべてのデータベース
を空にする
4. Jedisの基本的な使い方(理解)はJDBCと同等
Redis は優れたキャッシュ サーバーとして存在します. ほとんどの言語は、Redis に接続するためのドライバー パッケージを提供します. Java では、より有名なものは Jedis と Redisson です. 今日は、プログラムを使用して redis を操作する方法を学ぶために、Jedis を例として取り上げます .
ジェディスAPI
方法 | 説明 |
---|---|
新しいジェディス(ホスト、ポート) | jedis オブジェクトを作成します。パラメーター host は redis サーバーのアドレス、パラメーター port は redis サービス ポートです。 |
セット(キー、値) | 文字列型の設定データ |
get(キー) | 文字列型のデータを取得する |
hset(キー、フィールド、値) | ハッシュ型のデータを設定 |
hget(キー,フィールド) | ハッシュ型のデータを取得する |
lpush(キー、値) | リスト型の設定データ |
lpop(キー) | リストの左側にあるスタックをポップします |
rpop(キー) | リストの右側にあるスタックをポップします |
デル(キー) | 指定されたキーを削除します |
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.3</version>
</dependency>
</dependencies>
public static void main(String[] args) {
// 1.创建连接
Jedis jedis = new Jedis("127.0.0.1", 6379);
// 2.新增
jedis.set("1002", "李四");
//3.查询
String value = jedis.get("1002");
System.out.println(value);
// 4.关闭连接
jedis.close();
}
Jedis 接続プール
public static void main(String[] args) {
// 0.创建连接池配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50); // 最大连接数
config.setMaxIdle(20); // 最大空闲数
// 1.创建连接池
JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379);
// 2.获取连接
Jedis jedis = jedisPool.getResource();
// 3.进行 新增、修改、删除、查询
// 4.归还连接
jedis.close();
}
5. Spring Data Redis (強調 *****)
導入:
Spring Data Redis は、Spring アプリケーションから Redis への簡単な構成とアクセスを提供します
RedisTemplate
基盤となる Jedis を高度にカプセル化することで、redis のさまざまな操作を提供します。
-
ValueOperations: 単純なキーと値のペア操作文字列
-
SetOperations: セット型データ操作セット
-
ZSetOperations: zset 型のデータ操作 sortedset---->zset
-
HashOperations: ハッシュ型データ操作のハッシュ
-
ListOperations: リスト型のデータに対してリストを操作する
環境構築
1. 依存
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
</parent>
<dependencies>
<!-- SpringDataRedis框架-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2. 設定ファイル
spring:
redis:
host: localhost
port: 6379
database: 0 # 操作的是0号数据库
jedis: #Redis连接池配置
pool:
max-active: 8 #最大连接数
max-wait: 1ms #连接池最大阻塞等待时间
max-idle: 4 #连接池中的最大空闲连接
min-idle: 0 #连接池中的最小空闲连接
3.API
@Autowired
private RedisTemplate redisTemplate;//二进制(能取,在可视化工具中看不到数据)
@Autowired
private StringRedisTemplate stringRedisTemplate;//RedisTemplate 的子类
3.1 運用値
// 操作字符串类型
@Test
public void test01() throws Exception {
// 获取string操作对象
ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();
// 存值
opsForValue.set("city", "北京");
// 取值
String value = opsForValue.get("city");
System.out.println(value);
// 存验证码存活5分钟
opsForValue.set("sms_13700137000", "6375",TimeUnit.SECONDS);
//删除
redisTemplate.delete("city");
}
ハッシュ型データの操作
// 操作hash类型
@Test
public void test02() throws Exception {
// 获取hash操作对象
HashOperations<String, Object, Object> opsForHash = stringRedisTemplate.opsForHash();
// 存值
//opsForHash.put("1005", "nage", "zhangsan");
//opsForHash.put("1005", "age", "18");
//opsForHash.put("1005", "sex", "man");
// 取出年龄
String age = (String) opsForHash.get("1005", "age");
System.out.println(age);
System.out.println("---------------");
// 取出所有key
Set<Object> keys = opsForHash.keys("1005");
for (Object key : keys) {
System.out.println(key);
if("sex".equals(key)){
ops.delete("1005",key); //删除map中的key
}
}
System.out.println("---------------");
// 取出所有value
List<Object> values = opsForHash.values("1005");
for (Object value : values) {
System.out.println(value);
}
// 删除
stringRedisTemplate.delete("1005");
}
リスト型データの操作
// 操作list类型
@Test
public void test03() throws Exception {
// 获取list操作对象
ListOperations<String, String> opsForList = stringRedisTemplate.opsForList();
// 存值
//opsForList.leftPush("alist", "a");
//opsForList.leftPush("alist", "b");
opsForList.leftPushAll("alist", "a", "b");
opsForList.rightPush("alist", "c");
// 取值
List<String> list = opsForList.range("alist", 0, -1);
for (String s : list) {
System.out.println(s);
}
System.out.println("--------------");
// 获取list长度
Long size = opsForList.size("alist");
System.out.println(size);
System.out.println("--------------");
// 遍历删除
for (Long i = 0l; i < size; i++) {
// 弹出
System.out.println(opsForList.rightPop("alist"));
}
}
操作収集型データ(拡張)
// 操作set类型
@Test
public void test04() throws Exception {
// 获取set操作对象
SetOperations<String, String> opsForSet = stringRedisTemplate.opsForSet();
// 存值
// opsForSet.add("lol", "a", "b", "c", "a");
// 获取
Set<String> lol = opsForSet.members("lol");
for (String s : lol) {
System.out.println(s);
}
// 删除
opsForSet.remove("lol", "a");
}
順序付きコレクション型データの操作 (拡張)
// 操作zset类型
@Test
public void test05() throws Exception {
// 获取 zset操作对象
ZSetOperations<String, String> opsForZSet = stringRedisTemplate.opsForZSet();
// 存值
// opsForZSet.add("wangzhe", "安其拉", 66.6);
// opsForZSet.add("wangzhe", "兰陵王", 68.6);
// opsForZSet.add("wangzhe", "后羿", 79.6);
// 修改
// opsForZSet.add("wangzhe", "安其拉", 85.6);
// 删除
opsForZSet.remove("wangzhe", "兰陵王");
// 取值
Set<String> wangzhe = opsForZSet.reverseRange("wangzhe", 0, -1);
for (String s : wangzhe) {
System.out.println(s);
}
}
一般的な操作(マスターする必要があります)
// 通用操作
@Test
public void test06()throws Exception{
// 查询所有key
Set<String> keys = stringRedisTemplate.keys("*");
for (String key : keys) {
System.out.println(key);
}
// 判断某个key是否存在
Boolean itheima = stringRedisTemplate.hasKey("1005");
System.out.println(itheima);
// 判断某个key的类型
DataType type = stringRedisTemplate.type("1005");
System.out.println(type.name());
}