無知からRedisのは少し知っています
ウィキペディア - Redisのメモリ、オプションの永続キーと値のストアデータベースに基づいて、ANSI C、サポートネットワークで書かれたオープンソースであります
単純に、言うことができるのRedisは、高性能のNoSQLデータベースです
NoSQLとは何ですか?
我々は以前学んだのMySQLデータベースは、通常、SQLデータベース、従来のリレーショナル・データベースであり、我々は今日の学びのRedisデータベースは NoSQLのデータベースである、また、我々は、MySQLに精通している非リレーショナルデータベース、などとして知られていますコンセプトは、我々はBaiduの百科事典を説明ポストのセット、それは新しいデータベースのコンセプトである、完全に異なっています
NoSQLのは、非リレーショナル・データベースを指します。特に大規模とWeb2.0の高い同時SNS型の純粋な動的なサイトが不十分であるように思われたウェブサイト、従来のリレーショナルデータベース処理Web2.0のサイト、インターネットWeb2.0の上昇によって、克服することが困難な多くの問題がありました、ではなく、独自の特性に起因するリレーショナルデータベースは、非常に迅速に開発されています。NoSQLデータベースは、特にビッグデータアプリケーションの問題では、もたらされた課題の複数のデータ型の大規模なデータ収集を解決するために生成される - Baiduの百科事典
説明:私たちは今、ブログ、RSS、P2P、マイクロブログを見て、過去に比べて全てがWeb2.0の、Web2.0のWeb1.0の製品に属しているユーザーとの対話に重点をビブラートされ、ユーザーがいないだけを閲覧することができますまた、サイトのコンテンツの製造に関与し、ユーザが行くようになるように、いくつかのリソースはまた、テキストや画像や短いビデオなど、サイトにアップロードすることができます
なぜNoSQLの?
- 展開の低価格:オープンソースソフトウェアをベースにシンプルな操作を展開
- 豊富なストレージ・フォーマット:キーと値のフォーム、ドキュメント、画像やオブジェクトのコレクションや他のフォーマットを含む他の多くの形態を、サポートしています
- 速度:データではなく、ハードディスクよりも、キャッシュに格納され、例えばRedisのキーと値のペアをベースと、SQL層の分析を必要としないが、性能は非常に高いです
- 拡張が容易なカップリングなし、
- SQLでは、使用されているデータを削除することはできませんが、それはのNoSQLを操作することができます
NoSQLのSQLは、それを置き換えることができますか?
いくつかは、言うのNoSQL =非SQLが、私はこのような理解のNoSQL =だけでなく、SQLを好むだろう、私たちは、それぞれの技術は、独自の具体的な理由を持って生産するために二つの技術の品質を決定するために絶対的な結論することはできません、私の意見では、NoSQLのは、SQLデータベースへの補足として、より適しているため、高いパフォーマンス大量のデータ要件の出現まで、とのNoSQLに、本製品の簡単な構造ではなく、大量のデータに高速伝統的なSQLよりもデータ処理アップで多くの、しかし、再び、論理演算は非常に簡単でなければならない、それ以外の場合は無力です
私の意見では、あなたは、単にNoSQLのは、パフォーマンスのための機能である、と言うが、する必要がありますすることができ、複雑なビジネスロジックを扱うにも使用する必要があるリレーショナルデータベースのモデルでは現実的ではありませんあなたは完全にSQLのNoSQLを交換したいように、両方の、補完的な関係のような、より
SQLのメリット:
- テーブルとマルチテーブルの前に複雑なクエリ操作をサポート
- データセキュリティ要件を確保するために、物事の処理をサポートしています
- 低い学習コスト、より多くの情報
非常に多くの市場で入手可能のNoSQL製品は、我々が今日紹介したいと思いますが、データベースに基づいて、キーと値の店舗の一つである--Redis
知人のRedis
私たちは、冒頭で述べたように、RedisのNoSQLのデータベースは、高性能で、そのアプリケーションのシナリオ、それは何ですか?
- データクエリ、ニュース、商品内容:ユーザーコンテンツのキャッシングについては、次のようなデータ・アクセス、高負荷を大量に処理することができます
スパイク、12306次のようなタスクキュー、
オンラインバディリスト
アプリケーション、ウェブサイトの統計情報ランキング
キーと値のストアに基づいているため、メモリの種類は、それを持っているものをサポートすることができますか?
文字列型 - 文字列
リスト - リスト:LinkedListの
コレクション - セット
順序付きコレクション - にSortedSet
ハッシュ - ハッシュ:マップ
ダウンロードしてインストール
Linuxの
公式サイト:https://redis.io
:公式サイトへのアクセス速度が遅すぎるとして、我々は、対応する中国のネットワークにアクセスすることができますhttp://www.redis.net.cnを
ダウンロード、抽出物は、コンパイルします。
$ wget http://download.redis.io/releases/redis-5.0.4.tar.gz
$ tar xzf redis-5.0.4.tar.gz
$ cd redis-5.0.4
$ make
バイナリファイルは、以下のようにsrcディレクトリの下で実行するようにコンパイルされた後:
$ src/redis-server
あなたは、ビルトインのRedisを行うことが、クライアントのRedisの記述したコードを使用することができます例えば、私たちは、キー名-zhangsanを堆積させます
$ src/redis-cli
redis> set name zhangsan
OK
redis> get name
"zhangsan"
ウィンドウズ
私たちは、Windowsのバージョンを見つけるgithubのに行くことができますが、バージョンが遅れになります
https://github.com/microsoftarchive/redis/releases
解凍は使用することができます
Redisの-SERVER.EXE:Redisのサーバー
- Redisの-cli.exe:Redisのクライアント
redis.windows.conf:プロフィール
サポートの一般的なタイプ - [削除]コマンドの操作にアクセスするには
(A)タイプString - ストリング
(1)ストレージ
- 設定したキー値
- 127.0.0.1:6379> set address beijing
- OK
(2)を得ました
- キーを取得
- 127.0.0.1:6379> get address
- “beijing”
(2)削除
- デルキー
- 127.0.0.1:6379> del address
- (integer) 1
(B)リストのタイプ - リスト
(右)(左)リストの先頭または尾に要素を追加します。
(1)追加
- lpushキー値:リストの左側に要素を追加
- キーの値をRpush:リストの右側に要素を追加
127.0.0.1:6379> lpush listDemo zhangsan
(integer) 1
127.0.0.1:6379> lpush listDemo lisi
(integer) 2
127.0.0.1:6379> rpush listDemo wangwu
(integer) 3
(2)を得た:キー始端LRANGE
- 127.0.0.1:6379> LRANGEストリップデモ0 -1
1) "lisi"
2) "zhangsan"
3) "wangwu"
(2)削除
- キーLPOP:リストの左端の要素を削除し、その要素を返します。
- キーRPOP:要素の右端のリストを削除し、その要素を返します。
(C)コレクション・タイプ - セット
セット:順不同String型の収集、及び要素が重複することはできません
(1)ストレージ
- サッドキー値
127.0.0.1:6379> sadd setDemo aaa
(integer) 1
127.0.0.1:6379> sadd setDemo aaa
(integer) 0
(2)を得ました
- キーsmembers:すべての要素がコレクションを設定しなさい
127.0.0.1:6379> smembers setDemo
1) "aaa“
(2)削除
- SREMキー値:要素セットコレクションを削除します
127.0.0.1:6379> srem setDemo aaa
(integer) 1
(D)注文したコレクション型 - にSortedSet
それはにSortedSetの集まりであり、同じ文字列型の要素を設定し、要素の重複を許可していません。
違いは、それをRedisのダブルスコアは要素の各タイプに関連付けられることがあるのメンバーのスコアによって設定されたの大順に小さいです
順序集合のメンバーはユニークですが、スコア(点数)が、繰り返すことができます
(1)ストレージ
- zaddキースコア値
127.0.0.1:6379> zadd sortedsetDemo 20 zhangsan
(integer) 1
127.0.0.1:6379> zadd sortedsetDemo 10 lisi
(integer) 1
127.0.0.1:6379> zadd sortedsetDemo 60 wangwu
(integer) 1
(2)を得ました
- zrangeスタートキー端[withscores]
127.0.0.1:6379> zrange sortedsetDemo 0 -1
1) "lisi"
2) "zhangsan"
3) "wangwu"
(2)削除
- zremキー値
127.0.0.1:6379> zrem sortedsetDemo wangwu
(integer) 1
(E)ハッシュのタイプ - ハッシュ
(1)ストレージ
- HSETキーフィールド値
127.0.0.1:6379> hset hashDemo username admin
(integer) 1
127.0.0.1:6379> hset hashDemo password admin
(integer) 1
(2)を得ました
- キーフィールドをhget:指定したフィールドに対応する値を取得します
127.0.0.1:6379> hget hashDemo password
"admin"
- キーhgetall:すべてのフィールドと値を取得します。
127.0.0.1:6379> hgetall hashDemo
1) "username"
2) "admin"
3) "password"
4) "admin"
(2)削除
- HDELキーフィールド
127.0.0.1:6379> hdel hashDemo username
(integer) 1
データの永続化
オープニングは、すでに述べたように、Redisのは、インメモリ・データベースである、すなわち、すべての我々のデータはメモリに格納されており、我々の共通のMySQLとOracleのSQLデータベースは、ハードディスクにデータを格納し、すべてのものがあるが、長所と短所の両方でありますときRedisのサーバーの再起動やダウンタイムメモリデータベースが読み取りおよび書き込み速度は、データベースがより読み、ハードディスクに書き込むはるかに高速ですが、非常に面倒な問題がある、それは、ある、メモリ内のデータをするためには、失われますこの問題を解決するため、Redisのは、未来にハードドライブにメモリに格納されたデータは、私たちは、データベース内のデータを回復するために、これらのファイルを使用する際に役立つで永続化技術を提供し、
RDBモード(デフォルトモード)
RDB:一定の期間内に、キーの変更、および永続的なデータを検出
私たちは、あなたが設定ファイルを編集する必要があり、それを設定したいredis.windows.conf
# Save the DB on disk:
#
# save <seconds> <changes>
#
# Will save the DB if both the given number of seconds and the given
# number of write operations against the DB occurred.
#
# In the example below the behaviour will be to save:
# after 900 sec (15 min) if at least 1 key changed
# after 300 sec (5 min) if at least 10 keys changed
# after 60 sec if at least 10000 keys changed
# ......省略部分
save 900 1
save 300 10
save 60 10000
私たちは、書き込み回数与えられた一定の秒数とは、データベースが保存されます、つまり、その設定を保存するに基づいて、データベース上で同時に発生した場合、前述の説明は、意味最後の3行をされて変更する必要があります後者の二つの図の数が、見つかった指示に従って、最初の数は、時間間隔の数の第二の動作を表すデータを表します
最初の例では、900 1、それはすべての900秒を言うことですと、保存されたキーデータの少なくとも一方が変更されたを保存します
我々は、良いの特定のプロジェクトに応じて自分自身を設定する必要がRedisのサーバーを再起動する必要があり、我々は、コンフィギュレーション・ファイルを指定し、次のRedis指定したディレクトリにのポイントを聞かせて、コマンドを入力する必要があります redis-server.exe redis.windows.conf
たとえば、私の地元:D:\Tools\Redis-x64-3.2.100>redis-server.exe redis.windows.conf
AOFの道
AOF:各操作の後、永続的なデータに
また、redis.windows.conf内のファイルを設定することができます
我々は、この行を見つけます
appendonly no
代表に代わってオープンするno閉じるAOF、はいを
この行があります
# appendfsync no
:ない持続性のために
私たちは、無価値の位置を変更することができます
- appendfsync常に:たびに操作が永続的に行われます
- appendfsync everysec:永続1秒に1回
Jedis - JavaのオペレーティングRedisのデータベース
Jedisは驚くほど小さく、正気のRedisのJavaクライアントです。
Jedisは、使いやすいように考案されました。
Jedis私たちはRedisのJavaデータベースを操作することを可能にするツールである、あなたは、ジャーパッケージのインポートをダウンロードし使用するか、非常に単純なことができます
(A)タイプString - ストリング
//获取连接,空构造代表默认值 "localhost",6379端口
Jedis jedis = new Jedis();
//存储
jedis.set("address","beijing");
//获取
String address = jedis.get("address");
//关闭连接
jedis.close();
補足:SETEX()メソッドは、データを格納し、有効期限を指定してもよいです
//将aaa-bbb存入,且10秒后过期
jedis.setex("aaa",10,"bbb")
(B)リストのタイプ - リスト
//获取连接,空构造代表默认值 "localhost",6379端口
Jedis jedis = new Jedis();
//存储
jedis.lpush("listDemo","zhangsan","lisi","wangwu");//从左
jedis.rpush("listDemo","zhangsan","lisi","wangwu");//从右
//获取
List<String> mylist = jedis.lrange("listDemo", 0, -1);
//删除,并且返回元素
String e1 = jedis.lpop("listDemo");//从左
String e2 = jedis.rpop("listDemo");//从右
//关闭连接
jedis.close();
(C)コレクション・タイプ - セット
//获取连接,空构造代表默认值 "localhost",6379端口
Jedis jedis = new Jedis();
//存储
jedis.sadd("setDemo","zhangsan","lisi","wangwu");
//获取
Set<String> setDemo = jedis.smembers("setDemo");
//关闭连接
jedis.close();
(D)注文したコレクション型 - にSortedSet
//获取连接,空构造代表默认值 "localhost",6379端口
Jedis jedis = new Jedis();
//存储
jedis.zadd("sortedsetDemo",20,"zhangsan");
jedis.zadd("sortedsetDemo",10,"lisi");
jedis.zadd("sortedsetDemo",60,"wangwu");
//获取
Set<String> sortedsetDemo = jedis.zrange("sortedsetDemo", 0, -1);
//关闭连接
jedis.close();
(E)ハッシュのタイプ - ハッシュ
//获取连接,空构造代表默认值 "localhost",6379端口
Jedis jedis = new Jedis();
//存储
jedis.hset("hashDemo","name","lisi");
jedis.hset("hashDemor","age","20");
//获取
String name = jedis.hget("hashDemo", "name");
//获取所有数据
Map<String, String> user = jedis.hgetAll("hashDemo");
Set<String> keySet = user.keySet();
for (String key : keySet) {
//获取value
String value = user.get(key);
System.out.println(key + ":" + value);
}
//关闭连接
jedis.close();
Jedis接続プール
なぜ我々は、接続プールを使用するようにしたいですか?
私たちは、あなたが同時に接続プールを使用することができれば、より高い性能もののJedis、必要性が接続を確立するときに我々がデータを交換するたびに、接続を確立する必要がありますが、接続を確立するために、それはより多くの時間を要し、Jedisを使用したいです特定の方法によってのみ接続が確立されている取得する必要が接続されている場合、クライアントは、複数の接続を解放していない確立し、その後、不足して接続プールに返さので、大幅に時間を節約できます
//创建一个配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
//创建Jedis连接池对象
JedisPool jedisPool = new JedisPool(config,"localhost",6379);
//获取连接
Jedis jedis = jedisPool.getResource();
//使用
jedis.set("setDemo","zhangsan");
//关闭 归还到连接池中
jedis.close();
接続プーリングツール
public class JedisPoolUtils {
private static JedisPool jedisPool;
//静态代码初始化池配置
static{
//创建Properties对象
Properties pro = new Properties();
//读取配置文件
InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.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();
}
}
終了:
不備がある場合は、記事や間違った場所には、アイデアを共有するためにメッセージを残すために友人のサポートのおかげで歓迎します!
あなたが助けることができるなら、それは私に注意を払うことです!あなたが記事を読んでのマイクロチャネルの道を好むならば、私は公共の数に焦点を当てることができます
ここでは、すべて自分のための夢や仕事で、見知らぬ人です❤
プッシュは、公開の技術的な資料番号の独自開発に準拠:2オーバー10日以上