Redisの基本的な使い方!

目次

1. 基本概念:

1.Redisのインストールと起動

ダウンロード

ディレクトリ構造

3. Redis コマンド (強調)

Redis データ構造

 1.ひもひも(強調)

2.ハッシュハッシュ(強調)

 3.セットコレクション

 4.ZSet コレクション

共通コマンド

4. Jedisの基本的な使い方(理解)はJDBCと同等

ジェディスAPI

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のインストールと起動

ダウンロード

 

ディレクトリ構造

ディレクトリまたはファイル 効果
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());
}

おすすめ

転載: blog.csdn.net/weixin_50769390/article/details/127134134