学習JavaWeb14_Redis

使用カタログより良いです!

Redisの学習

Redisの

  • Redisの中国のネットワークチュートリアルします。https://www.redis.net.cn/tutorial/3501.html

コンセプト

  • Redisの非リレーショナルデータベースの高性能NOSQLシリーズです

NOSQLとは何ですか?

  • NoSQLの(のNoSQL = SQLないのみ) 、 「SQLないだけ」を意味し、新しいデータベースの概念である、を指し、非リレーショナルデータベース
  • インターネットWeb2.0のウェブサイトの台頭、Web2.0のサイトに対処する従来のリレーショナルデータベースでは、特に超大規模とWeb2.0の高い同時SNS型の純粋な動的なサイトは不十分であるように見えた、克服するために多くの問題が難しい暴露ではなく、独自の特性に起因するリレーショナルデータベースは、非常に迅速に開発されています。プロデュースのNoSQLデータベースがすることですもたらした課題の複数のデータ型の大規模なデータ収集解決、特に大規模なデータアプリケーションの問題を。
  • NOSQLとリレーショナルデータベースの比較
    • 利点:
      • コスト:NoSQLのデータベースは、シンプルで使いやすい展開することで、基本的にはオープンソースソフトウェアは、安価なリレーショナルデータベースに比べて、購入および使用のコストとしてOracleを使用してのように多くを費やす必要はありません。
      • クエリの速度:はるかに少ない自然なクエリ速度のNoSQLデータベースよりもキャッシュ内のデータベースにデータを格納するにNoSQLの、ハードディスク内のリレーショナル・データベースにデータを格納します。
      • データを保存するためにフォーマット:NoSQLの保存形式キー、値の形式などの文書、画像、フォームの形式では、などのオブジェクトまたはコレクションの種類の基礎としてだけでなくさまざまな形式で保存することができ、かつデータベースが唯一の基本的なタイプをサポートしています。
      • スケーラビリティ:リレーショナルデータベースのクエリメカニズムと同様のマルチテーブルにはそのような制限は非常に困難な拡大につながる参加します。
    • 短所:
      • NoSQLのは、新しい技術に属し、同じカテゴリ内のリレーショナルデータベース技術のない10年のためのメンテナンスツールと情報が、限定されています。
      • SQLは、SQLなどの業界標準をサポートしない場合は、サポートを提供していません一部のユーザーが学習し、使用コストする必要があります。
      • これは、トランザクションのリレーショナルデータベース処理を提供していません。
  • 非リレーショナルデータベースの利点
    • NOSQL性能がキーに基づいており、それは対応する値と、テーブルの主キーとの関係が考えられる、と解析されたSQL層を必要とせず、性能が非常に高いです。
    • データ間の結合は、それが水平に展開することは非常に容易ではないため、スケーラビリティは、キーと値のペアに基づいています。
  • リレーショナルデータベースの利点
    • 複雑なクエリは、複数のテーブル内のテーブルと便利の間で非常に複雑なデータクエリを実行するためにSQL文を使用することができます。
    • トランザクションサポートは、高性能の安全のためのデータアクセス要件を達成することができます。データベースのこれらの2つのタイプの場合は、他の利点は、彼らの弱さ、およびその逆です。
  • リレーショナルデータベースと非リレーショナルデータベース:ここに画像を挿入説明
  • 概要
    • リレーショナルデータベースとのNoSQLデータベースは、対向する補完的な関係ではないされている通常の状況下で、リレーショナルデータベースの使用、使用のためのNoSQLのNoSQLデータベースの使用、
    • リレーショナルデータベースの欠如のためのNoSQLデータベースは補償してみましょう。
    • 一般うリレーショナルデータベースであって、格納データのバックアップデータのリレーショナルデータベースは、データベースのNoSQLに格納されています

主流の製品NOSQL

  • データベースに格納されたキー(キー値)
    • 関連製品:東京キャビネット/暴君、Redisの、ヴォルデモート、バークレーDB
    • 代表的なアプリケーション:主にデータロードを大量に処理するために使用される高アクセスコンテンツのキャッシング、。
    • データモデル:キーと値のペアのシリーズ
    • 利点:クイッククエリ
    • 弱点:構造化データ・ストレージの不足
  • 列ストアデータベース
    • 関連製品:カサンドラ、HBaseの、Riakに
    • 代表的なアプリケーション:分散ファイルシステム
    • データモデル:カラムストレージクラスタ、データの同じ行の存在と
    • 長所:分散型の拡張が容易高速検索速度、拡張性、
    • 短所:比較的限定された機能
  • 文書データベース
    • 関連製品:CouchDBの、MongoDBの
    • 代表的なアプリケーション:Webアプリケーション(キー値と同様に、値が構成されています)
    • データモデル:キーと値のペアのシリーズ
    • 利点:データ構造は必須ではありません
    • 短所:クエリのパフォーマンスが高くなく、統一されたクエリ構文の欠如
  • グラフィック(グラフ)データベース
    • リレーショナルデータベース:のNeo4j、InfoGrid、無限グラフ
    • 代表的なアプリケーション:ソーシャルネットワーキング
    • データモデル:構造図。
    • 長所:図、構造的に関連するアルゴリズム。
    • 短所:マップ全体の結果を計算するために行う必要はなく、分散型クラスタプログラムを行うのは簡単。

Redisのは何ですか

  • Redisのキーは、C(キー値)データベース、公式テストデータのためのオープンソースの開発言語で50の100 000同時実行要求を高い性能を提供するために、読み出し速度は/秒、書き込み速度は81000倍11万倍/ sであり、記憶された異なるシナリオのニーズに対応するために、キーRedisのデータ型を複数設けることにより

  • 次のようにキーのデータ型のこれまでのところ、Redisのサポートは、以下のとおりです。

    • 文字列型文字列
    • 文字列型文字列
    • リストタイプリスト
    • コレクション型セット
    • インデックス付きのコレクションにSortedSet
  • アプリケーションシナリオをRedisの

    • キャッシュ(データクエリ、短い接続、ニュースコンテンツ、商品、コンテンツ、など)
    • オンラインチャットルームのバディリスト
    • タスクキュー。(スパイク、買い、12306、など)
    • アプリケーションのランキング
    • ウェブサイトの統計情報
    • データを処理する(ミリ秒単位まで正確)有効期限が切れました
    • 分散型クラスタアーキテクチャ別のセッション
  • 注意

    • Redisのは、いくつかのデータの変更が頻繁に発生していないキャッシュするために使用します。
      • データベースのデータが変更されると、我々はキャッシュを更新する必要があります。
      • データベース関連の操作を実行するには、表の追加や削除、あなたはRedisのに必要な再格納、データをキャッシュします
      • データに対応するCRUDサービスの方法でRedisの削除。

ダウンロードしてインストール

  • 公式サイト:httpsを://redis.io
  • 中国のネットます。http://www.redis.net.cn/
  • 解凍は直接使用することができます。
    • redis.windows.conf:プロフィール
    • Redisの-cli.exe:Redisのクライアント
    • Redisの-SERVER.EXE:Redisのサーバー

コマンド動作

  • Redisのデータ構造

    • Redisのが格納されている:データキー、値の形式、キーが文字列であり、値5つの異なるデータ構造を
      • 値のデータ構造
        • 文字列型文字列
        • ハッシュタイプのハッシュ:マップ形式
        • リストタイプのリスト:LinkedListの形式。繰り返しエレメントをサポートしています
        • コレクション型は設定:重複する要素を許可していません。
        • 順序集合のにSortedSetを入力します。重複した要素、およびシーケンシャル要素を許可しません
  • アイコン:ここに画像を挿入説明

  • 文字列型文字列

    • ストレージ:設定したキー値

      127.0.0.1:6379> set username zhangsan
      OK
      
    • 取得:キーを取得

      127.0.0.1:6379> get username
      "zhangsan"
      
    • 削除:デルのキーを

      127.0.0.1:6379> del age
      (integer) 1
      
  • タイプハッシュハッシュ

    • ストレージ:HSETキーフィールド値

      127.0.0.1:6379> hset myhash username lisi
      (integer) 1
      127.0.0.1:6379> hset myhash password 123
      (integer) 1
      
    • アクセス:

      • hget key field: 获取指定的field对应的值

        127.0.0.1:6379> hget myhash username
        "lisi"
        
      • hgetall key:获取所有的field和value

        127.0.0.1:6379> hgetall myhash
        1) "username"
        2) "lisi"
        3) "password"
        4) "123"
        
    • 删除: hdel key field

      127.0.0.1:6379> hdel myhash username
      (integer) 1
      
  • 列表类型 list

    • 可以添加一个元素到列表的头部(左边)或者尾部(右边)

    • 添加:

      • lpush key value: 将元素加入列表左表

      • rpush key value:将元素加入列表右边

        127.0.0.1:6379> lpush myList a
        (integer) 1
        127.0.0.1:6379> lpush myList b
        (integer) 2
        127.0.0.1:6379> rpush myList c
        (integer) 3
        
    • 获取:lrange key start end :范围获取

      127.0.0.1:6379> lrange myList 0 -1
      1) "b"
      2) "a"
      3) "c"
      
    • 删除:

    • lpop key: 删除列表最左边的元素,并将元素返回

    • rpop key: 删除列表最右边的元素,并将元素返回

  • 集合类型 set:不允许重复元素

    • 存储:sadd key value

      127.0.0.1:6379> sadd myset a
      (integer) 1
      127.0.0.1:6379> sadd myset a
      (integer) 0
      
    • 获取:smembers key:获取set集合中所有元素

      127.0.0.1:6379> smembers myset
      1) "a"
      
    • 删除:srem key value:删除set集合中的某个元素

      127.0.0.1:6379> srem myset a
      (integer) 1
      
  • 有序集合类型 sortedset

    • 不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

    • 存储:zadd key score value

      127.0.0.1:6379> zadd mysort 60 zhangsan
      (integer) 1
      127.0.0.1:6379> zadd mysort 50 lisi
      (integer) 1
      127.0.0.1:6379> zadd mysort 80 wangwu
      (integer) 1
      
    • 获取:zrange key start end [withscores]

      127.0.0.1:6379> zrange mysort 0 -1
      1) "lisi"
      2) "zhangsan"
      3) "wangwu"
      
      127.0.0.1:6379> zrange mysort 0 -1 withscores
      1) "zhangsan"
      2) "60"
      3) "wangwu"
      4) "80"
      5) "lisi"
      6) "500"
      
    • 删除:zrem key value

      127.0.0.1:6379> zrem mysort lisi
      (integer) 1
      
  • 通用命令

    • keys * : 查询所有的键
    • type key : 获取键对应的value的类型
    • del key:删除指定的key value

持久化

  • redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。

  • redis持久化机制:

    • RDB:默认方式,不需要进行配置,默认就使用这种机制

      • 在一定的间隔时间中,检测key的变化情况,然后持久化数据

      • 编辑redis.windwos.conf文件

        #   after 900 sec (15 min) if at least 1 key changed
        save 900 1
        #   after 300 sec (5 min) if at least 10 keys changed
        save 300 10
        #   after 60 sec if at least 10000 keys changed
        save 60 10000
        
      • 重新启动redis服务器,并指定配置文件名称

        D:\JavaWeb\redis\windows-64\redis-2.8.9>redis-server.exe redis.windows.conf

    • AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据

      • 编辑redis.windwos.conf文件

        appendonly no(关闭aof) --> appendonly yes (开启aof)
        
        # appendfsync always : 每一次操作都进行持久化
        appendfsync everysec : 每隔一秒进行一次持久化
        # appendfsync no	 : 不进行持久化
        

Java客户端 Jedis

  • Jedis: 一款java操作redis数据库的工具.

  • 使用步骤:

    • 下载jedis的jar包

    • 使用

      //1. 获取连接
      Jedis jedis = new Jedis("localhost",6379);
      //2. 操作
      jedis.set("username","zhangsan");
      //3. 关闭连接
      jedis.close();
      
  • Redisの中にさまざまなデータ構造のJedis操作

    • 文字列型文字列

      • セットする

      • 取得する

        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        //2. 操作
        //存储
        jedis.set("username","zhangsan");
        //获取
        String username = jedis.get("username");
        System.out.println(username);
        
        //可以使用setex()方法存储可以指定过期时间的 key value
        jedis.setex("activecode",20,"hehe");//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
        
        //3. 关闭连接
        jedis.close();
        
    • ハッシュタイプのハッシュ:マップ形式

      • HSET

      • hget

      • hgetAll

        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        //2. 操作
        // 存储hash
        jedis.hset("user","name","lisi");
        jedis.hset("user","age","23");
        jedis.hset("user","gender","female");
        
        // 获取hash
        String name = jedis.hget("user", "name");
        System.out.println(name);
        // 获取hash的所有map中的数据
        Map<String, String> user = jedis.hgetAll("user");
        
        // keyset
        Set<String> keySet = user.keySet();
        for (String key : keySet) {
        //获取value
        String value = user.get(key);
        System.out.println(key + ":" + value);
        }
        
        //3. 关闭连接
        jedis.close();
        
    • リストタイプのリスト:LinkedListの形式。繰り返しエレメントをサポートしています

      • Lpus / RPUS

      • LPOP / RPOP

      • LRANGE開始終了:範囲を取得

        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        //2. 操作
        // list 存储
        jedis.lpush("mylist","a","b","c");//从左边存
        jedis.rpush("mylist","a","b","c");//从右边存
        
        // list 范围获取
        List<String> mylist = jedis.lrange("mylist", 0, -1);
        System.out.println(mylist);
        
        // list 弹出
        String element1 = jedis.lpop("mylist");//c
        System.out.println(element1);
        
        String element2 = jedis.rpop("mylist");//c
        System.out.println(element2);
        
        // list 范围获取
        List<String> mylist2 = jedis.lrange("mylist", 0, -1);
        System.out.println(mylist2);
        
        //3. 关闭连接
        jedis.close();
        
    • コレクション型は設定:重複する要素を許可していません。

      • SADD

      • smembers:すべての要素を取得します。

        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        //2. 操作
        // set 存储
        jedis.sadd("myset","java","php","c++");
        
        // set 获取
        Set<String> myset = jedis.smembers("myset");
        System.out.println(myset);
        
        //3. 关闭连接
        jedis.close();
        5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序
        zadd
        zrange
        
        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        //2. 操作
        // sortedset 存储
        jedis.zadd("mysortedset",3,"亚瑟");
        jedis.zadd("mysortedset",30,"后裔");
        jedis.zadd("mysortedset",55,"孙悟空");
        
        // sortedset 获取
        Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
        
        System.out.println(mysortedset);
        //3. 关闭连接
        jedis.close();
        
  • jedis接続プール:JedisPool

    • 使用します。

      • 接続プールオブジェクトを作成しますJedisPool

      • Jedisを接続して取得する方法のgetResource()メソッドを呼び出します

        				//0.创建一个配置对象
        		        JedisPoolConfig config = new JedisPoolConfig();
        		        config.setMaxTotal(50);
        		        config.setMaxIdle(10);
        		
        		        //1.创建Jedis连接池对象
        		        JedisPool jedisPool = new JedisPool(config,"localhost",6379);
        		
        		        //2.获取连接
        		        Jedis jedis = jedisPool.getResource();
        		        //3. 使用
        		        jedis.set("hehe","heihei");
        		        		        //4. 关闭 归还到连接池中
        		        jedis.close();
        		
        		* 连接池工具类
        			public class JedisPoolUtils {
        
        			    private static JedisPool jedisPool;
        			
        			    static{
        			        //读取配置文件
        			        InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        			        //创建Properties对象
        			        Properties pro = new Properties();
        			        //关联文件
        			        try {
        			            pro.load(is);
        			        } catch (IOException e) {
        			            e.printStackTrace();
        			        }
        			        //获取数据,设置到JedisPoolConfig中
        			        JedisPoolConfig config = new JedisPoolConfig();
        			        config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
        			        config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
        			
        			        //初始化JedisPool
        			        jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
        			        			    }
        			        			    			    /**
        			     * 获取连接方法
        			     */
        			    public static Jedis getJedis(){
        			        return jedisPool.getResource();
        			    }
        			}
        		        
        
公開された53元の記事 ウォン称賛11 ビュー9366

おすすめ

転載: blog.csdn.net/SeafyLiang/article/details/104565281