Heim  >  Artikel  >  Backend-Entwicklung  >  Verwendung und Analyse von PHP-Datenbank-Redis

Verwendung und Analyse von PHP-Datenbank-Redis

墨辰丷
墨辰丷Original
2018-05-18 14:21:571156Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung von Redis im PHP-Datenbankbetrieb vorgestellt. Er analysiert die Schritte, Methoden und zugehörigen Vorsichtsmaßnahmen für die PHP-Installation und die Verwendung von Redis anhand von Beispielen

:

Obwohl Memcache einfach zu verwenden ist und das E/A-Problem löst, wenn die Datenbank auf eine hohe Parallelität stößt, müssen noch viele Probleme gelöst werden:

1. Datenpersistenzproblem, für das Memcache Speicher verwendet Speicher: Sobald der Memcache-Server ausfällt, gehen alle gespeicherten Daten verloren.

2. Memcache speichert einen einzelnen Datentyp und unterstützt nur Schlüsselwertdaten. Um komplexe Datentypen zu speichern, sind zwangsläufig eine große Anzahl logischer Operationen in PHP-Skripten erforderlich.

Grundlegende Einführung in Redis

Redis ist auch eine nicht relationale In-Memory-Datenbank. Es bietet alle Vorteile von Memcache bei der Datenspeicherung und basiert auf Memcache (für die Einführung von Memcache, siehe vorherigen Artikel: http://www.jb51.net/article/121315.htm

Datenpersistenzfunktion hinzugefügt, Redis verwendet RDB und AOF, um Datenpersistenz und den Server zu erreichen Plötzlich fällt es aus. Es können auch fast alle vorhandenen Datentypen beibehalten werden viel bequemer. Art der Speicherung und Datenbankoperationen (kann das Verbindungskennwort für den Server festlegen)
Redis’ Master-Slave-Trennung ist vollständiger (offizielle Entwicklung). andere Tools.


Natürlich sind die Datenbankoperationen auch komplizierter

Redis-Anwendungsszenarien und -Installation

Redis kann nicht nur dort verwendet werden, wo Memcache verwendet werden kann, sondern auch:

Sie können verknüpfte Listen zum Speichern von Daten verwenden und

damit die neuesten Informationen lesen . Die Sequenztabelle speichert Daten und liest ihre Ranking-Daten. Sie können die neueste Version direkt von der offiziellen Website (http://redis.io/) herunterladen Redis wurde offiziell kompiliert, direkt make/make test, Sie können den Installationspfad bei der Installation angeben

Nach Abschluss der Installation installieren Sie die Redis-Conf-Datei mv im Installationspaket Verzeichnis ist es notwendig, Redis zu konfigurieren und zu starten. Darüber hinaus befinden sich die folgenden Dateien im bin-Verzeichnis der Installationsverzeichnisdatei:

redis-benchmark/. Leistungstesttool -n xxx bedeutet die Ausgabe von xxx-Befehlen zum Testen von

redis-check-aof //Tool zum Überprüfen von Aof-Protokollen

redis-check-dump //Tool zum Überprüfen von rbd-Protokollen

redis- cli // Client

Redis-Server //Redis-Server-Prozess

Redis-Sentinel //Redis-Sentinel-Modus-Prozess

Wir verwenden vim, um redis.conf zu öffnen, um den Redis-Server einfach zu konfigurieren
Ändern Sie die Daemonisierungsoption auf „Ja“, um sie im Hintergrund auszuführen
Datenbank n Legen Sie einen Redis-Server mit n Servern fest, der Standardwert ist 0-15, insgesamt 16
Port n zum Festlegen des Redis-Servers Abhörport
Legen Sie „requirepass yourpassword“ fest, um das Kennwort festzulegen. Nachdem der Client eine Verbindung hergestellt hat, verwenden Sie das Authentifizierungskennwort, um die Überprüfung zu bestehen.
Wir verwenden den Befehl ./redis-server ./redis.conf, um den Redis-Server zu öffnen.

Verwenden Sie ./redis-cli [-p Port], um eine Verbindung zum Server herzustellen (Standard 6379).



Redis-Befehle

Grundlegende Befehle (einschließlich String-String-Typ)

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]//关闭服务器[不存储]

Befehl „list (verknüpfte Liste)“

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

Befehl „set“ (einstellen)

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

sorted_set (geordneter Satz) Befehl

zadd sortiert_set Score1 Key1 Score2 Key2 Score3 Key3.. .Add Geben Sie den Schlüssel zum geordneten Satz ein und definieren Sie seine Bewertung. Der Satz wird nach Bewertung sortiert.

zrange sorted_set a b [mit Bewertungen] Zeigt die Werte in der geordneten Liste von a bis b an. [Zeigen Sie die Bewertung jedes Werts an]

zrank/zrevrank sorted_set key Zeigt die Position des Schlüssels in der geordneten Menge in Vorwärts-/Rückwärtsreihenfolge an

zrem sorted_set key Löschen Sie den Schlüssel in der geordneten Menge

zcard sorted_set [ m n] Berechnen Sie die Gesamtzahl der

Hash-Befehle (Hash-Typ) im geordneten Satz [mit Werten zwischen m und n]


hset hashset key value Set hash The Wert des Tabellenschlüssels ist value
hget hashset key Holen Sie sich den Schlüsselwert der Hash-Tabelle
hdel hashset key Löschen Sie einen Schlüssel in der Hash-Tabelle
hlen hashset Holen Sie sich die Länge der Hash-Tabelle

Es gibt viele Redis-Befehle, hier sind nur einige einfache aufgeführt. Für bestimmte Befehle können Sie das Übersetzungsdokument auf der offiziellen Website oder auf der chinesischen Website http://www.redis.cn/ überprüfen.

Redis-Transaktionen sowie Veröffentlichung und Abonnement


Transaktionen in Redis ähneln MySQL, nur die Anweisungen unterscheiden sich geringfügig.

        redis        mysql
开始事务    multi      start transition
          事务中的query语句
执行事务    exec        commit
回滚事务    discard       roll back
Für die Auswirkungen auf die Parallelität verfügt Redis über eine Watch-Anweisungssteuerung. Sobald sich der von der Watch-Anweisung überwachte Schlüsselwert vor der Übermittlung der Transaktion ändert, wird die Transaktion automatisch ausgeführt storniert und zurückgegeben.

Beobachten Sie Taste1 [Taste2...]

Beobachten Sie die Überwachung. Sämtliche Überwachung abbrechen.

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步骤详解

Das obige ist der detaillierte Inhalt vonVerwendung und Analyse von PHP-Datenbank-Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn