ホームページ >バックエンド開発 >PHPチュートリアル >PHP データベース Redis の使用法と分析

PHP データベース Redis の使用法と分析

墨辰丷
墨辰丷オリジナル
2018-05-18 14:21:571218ブラウズ

この記事では、PHP データベース操作における redis の使用法を主に紹介し、PHP で redis をインストールして使用する手順、方法、および関連する注意事項をサンプルの形式で詳しく分析します。以下のように:

memcache は使いやすく、データベースで高い同時実行が発生した場合の IO の問題を解決します。ダウンすると、保存されているデータはすべて失われます。

2. Memcache は単一のデータ型を保存し、キーと値のデータのみをサポートします。複雑な型のデータを保存するには、必然的に PHP スクリプトでの多数の論理演算が必要になります。

redis の基本的な紹介

redis は、データ ストレージにおける memcache のすべての利点を備えており、memcache に基づいています (memcache の概要については、前の記事を参照してください: http: //www.jb51 .net/article/121315.htm

データ永続化機能を追加しました。redis は RDB と AOF を使用してデータ永続化を実現し、サーバーが突然ダウンした場合でも、保存されているほぼすべてのデータを保持できます。 (文字列)、セット(セット)、ソートセット(順序付きセット)、ハッシュ(ハッシュ)、リスト(リンクリスト)のデータ型により、マルチタイプのストレージとデータベースの操作が容易になります

セキュリティ検証の追加 (サーバーに使用可能。接続パスワードを設定します) )

Redis のマスター/スレーブ分離システムはより完全です (公式開発)

パブリッシュ/サブスクライブ、キュー、キャッシュ、その他のツールをネイティブにサポートします

もちろん、そのデータベース操作も memcache よりも複雑です。
Redis アプリケーションのシナリオとインストール

Redis は、memcache が使用できる場所に加えて、次の場所でも使用できます。

リンクされたリストを使用して、データを保存し、その最新情報を読み取ることができます。シーケンス テーブルはデータを保存し、そのランキング データを読み取ります。 Redis なので、コレクションを使用してフォロー/フォローされた情報を保存できます。コンパイル済みですので、make/make testを実行するだけでインストール完了です インストール完了後、インストールパッケージ内のredis confファイルをインストールディレクトリのbinディレクトリに移動します。 . redisを起動するために必要な設定です

さらに、インストールディレクトリファイルの下のbinディレクトリに以下のファイルがあります

redis-benchmark //パフォーマンステストツール -n xxxはxxxコマンドを発行してテストすることを意味します。
redis-check-. aof //aof ログを確認するツール
redis-check-dump //rbd ログを確認するツール

redis-cli //Client

redis-server //Redis サーバープロセス

redis-sentinel //Redisセンチネル モード プロセス

vim を使用して redis.conf を開き、redis サーバーを簡単に設定します

バックグラウンドで実行するには、daemonize オプションを yes に変更します database n n 個のサーバーで Redis サーバーを設定します。デフォルトは 0 ~ 15 です、合計 16 個の
port.n を使用して、redis サーバーのリスニング ポートを設定します
requirepass yourpassword を設定して、クライアントが接続した後、認証パスワードを使用して検証を通過します

./redis-server を使用します。 ./redis.conf コマンドを使用して Redis サーバーを開きます。
./redis-cli [-p port] を使用してサーバーに接続します (デフォルトは 6379)。

redisコマンド


基本(文字列型を含む)コマンド

set key value [ex|px n] //设置值[并设置过期时间为n秒/毫秒]
get key //获取值
del key //删除值
incby|decby key n //将key值自增或自减n
rename key newkey//覆盖原来的
select n//选择第n个数据库
ttl key //查询key的过期时间,-1表示永不过期,不存在的为-2
expire key n //设置key的过期时间为n秒 
type key //获取key的存储类型
flushdb //清除当前数据库中的值
shutdown [nosave]//关闭服务器[不存储]
list(リンクリスト)コマンド

lpush/rpush list value1 [value2 value3...] //将value压入链表头/尾
lpop/rpop list //弹出链表头/尾的值
llen list //获取链表长度

setコマンド

sadd set value //往集合中添加value
smembers set //查看集合中的全部数据
srem set value1[value2...]//删除集合中的元素
sismember set value //判断value是否是集合中的一个元素

sorted_set (順序付きセット) コマンド

zaddsorted_set core1 key1 core2 key2 core3 key3...順序付きセットにキーを追加し、そのスコアを定義すると、セットはスコアによってソートされます zrangesorted_set a b [スコア付き] aからbまでの順序付きリストの値を表示 bが-1の場合は全て表示、[各値のスコアを表示]

zrank/zrevranksorted_setキー 順序付きセット内のキーを順/逆順で表示 位置in

zremsorted_setkey ソートセット内のキーを削除

zcardsorted_set [m n] ソートセット内に

hash(ハッシュ型)コマンドがいくつあるか計算 [mとnの間のスコア]

hset ハッシュセットキー値 Setハッシュテーブルのキーの値をvalueに

hget hashset key ハッシュテーブルのキーの値を取得
hdel hashset key ハッシュテーブル内のキーを削除
hlen hashset ハッシュテーブルの長さを取得

redisコマンドはたくさんありますが、ここでは、いくつかの簡単なものだけをリストします。特定のコマンドについては、公式 Web サイトまたは中国語 Web サイト http://www.redis.cn/

redis のトランザクションとパブリッシングとサブスクリプション


で確認できます。
Redis と mysql のトランザクションは似ていますが、ステートメントが少し異なるだけです。

        redis        mysql
开始事务    multi      start transition
          事务中的query语句
执行事务    exec        commit
回滚事务    discard       roll back

同時実行効果のために、redis には watch ステートメントの制御があり、トランザクションが送信される前に watch ステートメントによって監視されているキーの値が変更されると、トランザクションは自動的にキャンセルされ、ロールバックされます。 watch key1 [key2...]unwatch すべてのモニタリングをキャンセルします。

redis原生发布和订阅功能,它类似于设计模式中的观察者模式,被订阅对象一旦发布了新的消息,那么所有订阅对象都会收到这条消息。使用方式为:

subscribe key //订阅某个key,如果这个key发布了新的消息,则会收听到
public key value//发布消息key,值为value,返回值是收到这个消息的人的个数
unsubscribe key //取消监听
psubscribe key1 key2/pattrn //[根据模式]监听多个key


redis的数据持久化

redis通过rdb和aof两种方式实现数据持久化,两种数据持久化方式都会占用CPU资源,拖慢redis的执行效率,一般两种模式配合使用。

rdb方式的主要原理就是达到某一写入条件后把内存中的所有数据的快照保存一份到磁盘上,数据恢复时用数据快照恢复。

aof方式是通过将每条redis执行命令记录入文本文件,恢复数据时重复执行记录的命令。

rdb方式实现数据持久化

用save/bgSave命令可以主动使用rdb方式[后台]存储rdb

修改redis.conf文件进行配置

save m n          //在m秒内有n次修改即进行一次快照,保存点很重要,一般会配置多个条件,满足其中之一就保存
stop-writes-on-bgsave-error yes //在进行快照的过程中如果出错,则停止写入
rdbcompression yes     //设置进行数据压缩
rdbchecksum yes       //导入数据时检查文件是否损坏
dbfilename xxx.rdb     //导出的文件名
dir path          //导出的文件路径

aof方式实现数据持久化

aof持久化的问题在于将每条指令都记录下来,即使是对一个键的反复操作,这样会导致aof文件越来越大,使用aof重写将会大大减小aof文件的体积,因为它是在最后将数据库内数据的状态统一逆化为命令,而不论一个key经过了多少次变化。使用 bgrewrite 命令可手动重写aof文件。

配置redis.conf文件:

noapppendfsync-on-rewrite yes    //设置导出rdb时停止写入aof,aof会被写在内存队列里,dump rdb 完成后统一进行写入操作。
appendfsync everysec        //每秒写入一次
appendfilename           //path/filename.aof
auto-aof-rewrite-percentage 100   //文件大小增长100%时重写
auto-aof-rewrite-min-size 64m    //文件至少达到64m时重写

redis的主从复制

主从复制时,主从都要以自己的.conf文件来启动服务器。主服务器可以将rdb关闭,以从服务器来产生rdb,加快主服务器的速度。

从服务器复制一个redis6380.conf文件,设置端口,pid存放文件,只读,主服务器的密码。

port 6380
pidfile filename
slave-read-only yes
masterauth password

设置完成后,分别用不同的conf文件打开服务器。

考虑到主服务器宕机的情况,我们用sentinel redis哨兵来监测服务器状态,在主服务器宕机之后做出反应。sentinel是redis集成的,我们只需要将安装包里的sentinel.conf文件拷贝到redis/bin目录下,使用redis-sentinel进程文件来启动服务器即可。

port 26379                    //sentinel监听的端口号
daemonize yes                  //后台启动进程
sentinel monitor mymaster 192.168.100.211 6379 2 //设置主进程ip和端口号,并设置两个哨兵发现主服务器长时间无法连接才判定其宕机
sentinel down-after-milliseconds mymaster 30000 //30000毫秒连接不上判定为无法连接
sentinel parallel-syncs mymaster 1        //一个主服务器打开时,同时复制的从服务器数,太大的话会造成服务器瞬间拥堵
sentinel failover-timeout mymaster 900000    //在90000秒内哨兵不再试图恢复原主服务器

PHP操作redis服务器

安装好php的redis扩展后(具体可参考前面的文章 Linux下php安装Redis扩展的方法 http://www.jb51.net/article/99775.htm),就可以直接使用redis的类函数库了。

如下是典型的redis应用。

$redis=new Redis();           //实例化一个Redis对象
$redis->connect('host',port);      //连接redis服务器
$redis->auth('password');        //用密码认证
$redis->set($key,$value[,$expire_time]);//设置一个值
$content=$redis->get($key);       //获取值

相关推荐:

laravel使用Redis实现网站缓存读取实现步骤详解

CodeIgniter使用redis步骤详解

PHP操作Redis步骤详解

以上がPHP データベース Redis の使用法と分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。