Redisのは、様々なアプリケーションおよび使用シナリオ(rpm)を記述する

さまざまなアプリケーションや使用シナリオのRedisを説明し

開発2017年11月22日10時10分36秒JavaWebに焦点を当てます

Redisの

まず、なぜ使用

  1. アプリケーションサーバーを解決するためのCPUとメモリの圧力

  2. Ioは、読み取り操作を減らすIOの圧力を減らすために

  3. スケーラビリティ、リレーショナルデータベースは、テーブルの構造を変更することは困難である、強力ではありません

第二に、利点:

  1. 無関係データベースのNoSQL、データ構造は、単純なテーブルを拡張することは比較的容易です

  2. NoSQLの読み出し速度、大規模データの高速処理

第三に、アプリケーションのシナリオ:

  1. 高い同時読み取りおよび書き込みデータ

  2. 大量のデータの読み込みと書き込み

  3. 高いスケーラビリティ必要なデータ

第四に、不快感のシーン:

  1. トランザクションのサポートが必要(非リレーショナルデータベース)

  2. SQLベースの構造化照会ストレージ、複雑な関係

五、Redisの構造:

Redisのは、オープンソースのキーと値のデータベース、サポート文字列、リスト、セット、ZSETとハッシュデータ型です。これらのデータの操作は、永続的なデータの効率を確保するために定期的redus原子です。

第六に、使用シナリオ:

  1. リレーショナル・データベースはキャッシュを行います

  • 高頻度アクセスデータキャッシュ、データベースのIOを減らします

  • 分散型アーキテクチャ、共有セッションを行います

  1. 具体的なデータは永続することができます。

  • ランキングを格納することができZSET型を使用します

  • n個のデータストレージをソートするために、最新の自然な時間のリストを使用して

七、Redisの下のLinux:

  1. Redisのディレクトリ:USR / local / binに

  2. Linuxの一般的なコマンドの下でのRedis:

  1. Redisのベンチマーク:パフォーマンステストツール

  2. Redisのサーバー:Redisのサーバの起動

  3. Redisの-CLI:Redisのクライアント起動し、オペレータ

八、Redisの基礎

  1. ポート:6379

  2. 16デフォルトのデータベース、インデックスは0から始まります

  3. スレッド化:Redisのマルチプレクサは、シングルスレッド+ IOです:レディ状態で説明したファイルを確認してください

Memchached:マルチスレッドロック+

  1. Redisのデータ型:文字列セットリストのハッシュZSET

九、Redisのコマンド:

  1. キー操作

キー* 現在のすべてのキーバンクを参照してください。
<キー>が存在します キーが存在するかどうかを判定
デル<キー> キーを削除します。
有効期限は、<キー> <二> S秒でキーの有効期限を設定します
TTL <キー> -1期限切れ期間を示すが、-2、すでに有効期限が切れている秒数をチェック
移動<キー> <DB> 次のキーは、別のライブラリに移動します
DBSIZE 鍵データベースの数を表示
flushdb 空の現在のライブラリ
flushall すべてのライブラリを殺すために渡し
  1. 文字列型:文字列が安全バイナリであり、任意のデータソースを含むことができ、最大512メートル

取得<キー> 対応するキーをチェック
セット<キー> <値> ペアを追加
追加<キー> <値> 元の値の末尾に追加指定された値
<キー>はstrlen 価値の長さを取得します。
setnx <キー> <値> キーは、キー値の設定に存在しない場合には
INCR <キー> それが空の場合、いずれかで番号を格納されたキー、値は1
DECR <キー> それが空の場合、デジタルマイナス1に格納されたキーは、その値は-1
incrby / decrby <キー> <步长> 増減でキー数値

文字列バッチ処理:

MSET <キー1> <をvalue1> <キー2>、<値2> 一方、キーと値のペアの複数
mgetは<キー1> <キー2> 同時に、より多くの価値を得ます
msetnx <キー1> <をvalue1> <キー2>、<値2> 与えられたキーが存在しない場合
getrange <キー> <ストップ> <スタート> 同様のsunstring
setrange <キー> <ストップ> <スタート> 元の値に類似sunstringを上書き
SETEX <キー> <値> <満了します> 有効期限を与え、同時にキーを設定します
GETSET <キー> <値> TMは、古い値を取得すると同時に、新しい値を設定しました
  1. リスト:リスト

1、機能:

マルチタッチ値

Redisのリストには、左または右から挿入され、文字列の単純なリストです

下の層が二重にリンクされたリストで、下付きクエリのパフォーマンスによって、両端の高パフォーマンスの操作は非常に低いです

lpush / rpush <キー> <をvalue1> <値2> .. 左右の複数の値を挿入します
LPOP / RPOP <キー> 左または右の値から排出された、光の死のキー値
rpoplpush <キー1> <キー2> キー1 KEY2の右から左に値を吐き出します
LRANGE <キー> <インデックス> 左から右にインデックス添字に応じて要素を取得します
LINDEX <キー> <インデックス> 左から右にインデックス添字に応じて要素を取得します
llen <キー>を取得リストの長さ リストの長さを取得します。
linsert <キー> <値> <NEWVALUE>の前に NEWVALUE前にキー値を挿入
  1. 同様の設定順不同リストを何もデータがリストに繰り返されないことを確保するために、底がハッシュテーブルにNULL値である:セット

サッド<キー> <値1>、<値2> キーに複数の要素は、重複を無視します
<キー> smembers 設定値のすべてを削除します
sismember <キー> <値> この値には1 0を持っていないだろう、キー値のセットがあるか否かを判断します
SCARD <キー> セット内の要素の数を返します。
SREM <キー> <をvalue1> <値2> コレクション内の要素を削除するには
SPOP <キー> 設定値のランダムな排出
srandmember <key> <n> 随机从集合中取出n个值,不会从集合中删除
smove <key1> <key2> <value> 将key1中的value 移动到key2 中
sinter <key1> <key2> 返回两个集合的交集元素
sunion <key1> <key2> 返回两个集合的并集
  1. hash:键值对集合,类似map<String,Object>

hset <key> <filed> <value> 给key 集合中的file 键赋值value
hget <key1> <field> 从key1 集合file取出value
hmset <key1> <field1> <value1> <field2> <value2> 批量设置hash的值
hexists <key> <field> 查看key中的field 是否存在
hkeys <key> 列出key中所有的filed
hvals <key> 列出该hash集合中所有的value
  1. zset:与set集合非常相似,每个成员都关联了score,可以用来排序

zadd<key><score1><value1><score2><value2> 将一个或多个元素以及score加入zset
zrange<key><start><stop> withscore 返回下标在区间内的集合,带有score
zrangebyscore <ket> <min> <max>[withscore] [limit offset count] 返回key中 score介于min和max中的成员,升序排列
zrevrangerbyscore <key> <min> <max> [withscore] [limit offset count] 降序
zincrby <key> <increment> <value> 在key集合中的value上增加increment
zrem <key> <value> 删除key集合下的指定元素
zcount <key> <min><max> 统计 区间内的元素个数
zcord <key> 获取集合中的元素个数
zrank <key><value> 查询value在key中的排名,从0开始

十、redis持久化:

  1. 两种方式:rdb(redis database)和aof(append of file)

  2. RDB:在指定时间间隔内,将内存中的数据作为一个快照文件(snapshot)写入到磁盘,读取的时候也是直接读取snapshot文件到内存中

①持久化过程:redis单独创建(fork)一个进程来持久化,会先将数据写入临时文件中,待上次持久化结束后,会将该临时文件替换上次持久化文件,比aof高效,但是最后一次数据可能会丢失

②Fork:在linux中,fork()会产生一个跟主进程一样的子进程,出于效率考虑,主进程和子进程会公用一段物理内存,当发生改变的时候,才会把主进程“”写时复制”一份给子进程

③Redis备份的文件:在redis.conf中设置,dbfilename默认为:dump.rdb

④ Rdb保存策略:

    1. 900s 1 file change

    2. 300s 10file change

    3. 60s 10000file change

⑤Rdb的备份:

    1. config get dir 得到备份的文件夹

    2. 复制备份文件

⑥Rdb恢复:

    1. 关闭redis

    2. 将备份文件复制到工作目录下

    3. 启动redis,自动加载

  1. AOF : 以日志形式记录每个写操作,启动时通过日志恢复操作

    1. 开启AOF:默认不开启,进入redis.conf找到appendonly yes打开

    2. 修复AOF:redis-check-aof –fix appendonly.aof

    3. 同步频率:每秒记录一次,如果宕机该秒记可能失效

    4. Rewrite:bgrewriteaof 因为日志是追加方式,文件会越来越大,当超过了设置的阈值时,日志文件会压缩,保留仅可以恢复的日志

  2. RDB和AOF对比

    1. 节省磁盘空间

    2. 恢复速度快

    3. RDB优点:

    1. ROD缺点:

    1. 数据太大时,比较消耗性能

    2. 一段时间保存一次快照,宕机时最后一次可能没有保存

c) AOF优点:

i. 备份机制更加稳健

ii. 可读的日志文件,通过aof恢复更加稳健,可以处理失误

d) AOF缺点:

i. 比RDB更占磁盘

ii. 备份速度较慢

    1. iii每次都同步日志,有性能压力

  1. RDB和AOF哪个好

    1. 官方推荐都启用

    2. 对数据不敏感,单独用RDB

    3. 不建议单独使用AOF

    4. 若作为纯缓存使用,可以都不开启

十一、Redis事务:输入multi,输入的命令都会依次进入到队列中,但不会执行,直到输入exec,redis会将之前命令队列中的命令依次执行,通过discard可以放弃组队。

  1. 主要作用:序列化操作,串联多个命令防止别的命令插队

  2. 悲观锁:每次拿到数据的时候都会上锁,或者等待别人处理完再去拿锁,传统的关系型数据库里边很多用到了这种锁机制,比如行锁、表锁、读锁、写锁

  3. 乐观锁:每次拿数据的时候总认为别人不会修改数据,所以不会上锁。但是更新的时候回去判断别人有没有更改数据,使用版本号机制。乐观锁适用于多读的应用类型,可以提高吞吐量。

  4. Redis使用乐观锁:redis就是利用check-and-set机制实现事务

  5. 三大特性:

    1. 单独的隔离操作:事务中的所有命令都会序列化,按顺序执行。不会被其他客户端打断

    2. 没有隔离级别概念:队列中的命令没有提交之前不会被执行,事务外不能查看事务内的更新

    3. 不能保证原子性:跳过错误,依旧执行,没有回滚

十二、Redis订阅/发布:

是进程中的一种消息通信模式,发送者pub发送消息,订阅者sub接收消息 剩下的略。。。

十三、Redis主从复制:

  1. 是什么:主从复制就是主机数据更新后根据配置和策略,自动同步到备份机的master/slaver机制,master写为主,slave读为主

  2. 用处:

    1. 读写分离,性能拓展。

    2. 容灾快速恢复

  3. 配置服务器(配从不配主):

    1. 拷贝多个redis.conf文件

    2. 开启daemonize yes

    3. Pid文件名字

    4. 指定端口

    5. Log文件名字

    6. Dump.rdb名字

    7. Appendonly 关掉或者换名字

十四、Jedis:

  1. 所需jar包:

    1. common-pool-1.6jar包

    2. jedis-2.1

  2. 获取jedis对象:Jedis jedis = new Jedis(“ip” ,端口号);

十五、集群分布:

实现对redis的水平拓展,启动n’的redis节点,将整个数据分布在这n个节点中

  1. 配置conf文件:

    1. 拷贝多个redis.conf文件

    2. 开启daemonize yes

    3. Pid文件名字

    4. 指定端口

    5. Log文件名字

    6. Dump.rdb名字

    7. Appendonly 关掉或者换名字

  2. 配置cluster文件:

    1. cluster-enable yes 打开集群模式

    2. cluster-config-file xxx.conf 设置生成的节点配置文件名

    3. cluster-node-timeout 15000设置节点失联时间,超多该时间(毫秒),集群自动进入主从切换

    4.  

おすすめ

転載: www.cnblogs.com/LiZhongZhongY/p/10991389.html