Inhaltsverzeichnis
Redis是文本协议
实现:数据结构设计
kv设计
hash设计
zset设计
set设计
Heim Datenbank MySQL-Tutorial So simulieren Sie Redis mit MySQL

So simulieren Sie Redis mit MySQL

Jun 01, 2023 pm 03:13 PM
mysql redis

Redis是文本协议

redis是文本协议,协议名称叫做RESPRESPRedis 序列化协议的简写。它是一种直观的文本协议,优势在于实现异常简单,解析性能极好。

如图,Redis 协议将传输的结构数据,可以总结为 5 种最小单元类型。每个单元结束时,统一加上回车换行符号 \r\n

下面是几个规则:

单行字符串 以 + 开头;
多行字符串 以 $ 开头,后跟字符串长度;
整数值 以 : 开头,后跟整数的字符串形式;
错误消息 以 - 符号开头;
数组 以 * 号开头,后跟数组的长度;
Nach dem Login kopieren

比如,下面这个就是数组[9,9,6]的报文。

*3\r\n:9\r\n:9\r\n:6\r\n
Nach dem Login kopieren

所以这个协议的解析和拼装,是非常简单的。拿netty来说,就有codec-redis 模块供我们使用。

实现:数据结构设计

在数据表的设计上,我们发现,kvhash在效率上没有什么差别,因为它能够直接根据key定位到。

反倒是zset,由于有排序的功能,造成了很多操作的执行效率都不尽人意。

另外,由于我们不同的数据结构,是使用不同的表进行存储的。所以删除操作,要在每张表上都执行一遍。

kv设计

kv,即string,是redis里最基本的数据类型。一个key对应一个valuestring类型的值最大能存储512MB。

设计专用的数据库表rstore_kv,其中,rkey是主键。

rkey        varchar
val     varchar
lastTime    bigint
Nach dem Login kopieren

set操作

insert into rstore_kv("rkey","val","lastTime") values($1,$2,$3)
on duplicate key update set "val"=$2,"lastTime"=$3
Nach dem Login kopieren

get操作

select val from rstore_kv where "rkey" = $1
Nach dem Login kopieren

del操作

delete from rstore_kv where "rkey" = $1
Nach dem Login kopieren

exists操作

select count(*) as n from rstore_kv where  "rkey" = $1
Nach dem Login kopieren

ttl操作

select lastTIme from rstore_kv  where  "rkey" = $1
Nach dem Login kopieren

hash设计

hash 是一个键值(key=>value)对集合。hash 特别适合用于存储对象。

设计专用的数据库表rstore_hash,其中,rkeyhkey是联合主键。

rkey        varchar
hkey        varchar
val     varchar
lastTime    bigint
Nach dem Login kopieren

hset操作

insert into rstore_hash("rkey","hkey","val","lastTime") values($1,$2,$3,$4)
on duplicate key update set "val"=$3,"lastTime"=$4
Nach dem Login kopieren

hget操作

select val from rstore_hash where "rkey" = $1 and "hkey" = $2
Nach dem Login kopieren

hgetall操作

select hkey,val from rstore_hash where "rkey" = $1
Nach dem Login kopieren

hdel操作

delete from rstore_hash where "rkey" = $1 and "hkey" = $2
Nach dem Login kopieren

del操作

delete from rstore_hash where "rkey" = $1
Nach dem Login kopieren

hlen,hexists操作

select count(*) as num from rstore_hash where "rkey" = $1
Nach dem Login kopieren

ttl操作

select max(lastTIme) from rstore_hash  where  "rkey" = $1
Nach dem Login kopieren

zset设计

Redis zsetset 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。它的底层结构是跳跃表,效率特别高,但是会占用大量内存。

设计专用的数据库表rstore_zset,其中,rkeymember是联合主键。

rkey        varchar
member        varchar
score     double
lastTime    bigint
Nach dem Login kopieren

zadd操作

insert into rstore_zset("rkey","member","score","lastTime") values($1,$2,$3,$4) on duplicate key update update set "score"=$3,"lastTime"=$4
Nach dem Login kopieren

zscore操作

select score from rstore_zset where "rkey" = $1 and "member" = $2
Nach dem Login kopieren

zrem操作

delete from rstore_zset where "rkey" = $1 and "member" = $2"
Nach dem Login kopieren

zcard,exists操作

select count(*) as num from rstore_zset where "rkey" = $1
Nach dem Login kopieren

zcount操作

select count(*) as num from rstore_zset where "rkey" = $1 and score>=$2 and score<=$3
Nach dem Login kopieren

zremrangebyscore操作

delete from rstore_zset where "rkey" = $1 and score>=$2 and score<=$3
Nach dem Login kopieren

zrangebyscore操作

select member,score from rstore_zset
where "rkey" = $1 and score>=$2 and score<=$3 order by score asc,member asc
Nach dem Login kopieren

zrange操作

select member,score from rstore_zset
where "rkey" = $1 order by score asc offset $2 limit $3
Nach dem Login kopieren

zrank操作

select rank from (select member,rank() over (order by "score" asc, "lastTime" asc) as rank from rstore_zset where "rkey" = $1 ) m where m."member"= $2;
Nach dem Login kopieren

ttl操作

select max(lastTIme) from rstore_zset  where  "rkey" = $1
Nach dem Login kopieren

del操作

delete from rstore_zset where "rkey" = $1
Nach dem Login kopieren

set设计

RedisSetstring类型的无序集合。

设计专用的数据库表rstore_set,其中,rkeymember是联合主键。

rkey        varchar
member        varchar
lastTime    bigint
Nach dem Login kopieren

sadd操作

insert into rstore_set("rkey","member","lastTime") values($1,$2,$3)
on duplicate key update update set "lastTime"=$3
Nach dem Login kopieren

scard操作

select count(*) as num from rstore_set where "rkey" = $1
Nach dem Login kopieren

sismember操作

select member from rstore_set where "rkey" = $1 and "member" = $2
Nach dem Login kopieren

smembers操作

select member from rstore_set where "rkey" = $1
Nach dem Login kopieren

srem操作

delete from rstore_set where "rkey" = $1 and "member" = $2
Nach dem Login kopieren

del操作

delete from rstore_set where "rkey" = $1
Nach dem Login kopieren

ttl操作

select max(lastTIme) from rstore_set  where  "rkey" = $1
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo simulieren Sie Redis mit MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie optimiert man die MySQL-Abfrageleistung in PHP? Wie optimiert man die MySQL-Abfrageleistung in PHP? Jun 03, 2024 pm 08:11 PM

Die MySQL-Abfrageleistung kann durch die Erstellung von Indizes optimiert werden, die die Suchzeit von linearer Komplexität auf logarithmische Komplexität reduzieren. Verwenden Sie PreparedStatements, um SQL-Injection zu verhindern und die Abfrageleistung zu verbessern. Begrenzen Sie die Abfrageergebnisse und reduzieren Sie die vom Server verarbeitete Datenmenge. Optimieren Sie Join-Abfragen, einschließlich der Verwendung geeigneter Join-Typen, der Erstellung von Indizes und der Berücksichtigung der Verwendung von Unterabfragen. Analysieren Sie Abfragen, um Engpässe zu identifizieren. Verwenden Sie Caching, um die Datenbanklast zu reduzieren. Optimieren Sie den PHP-Code, um den Overhead zu minimieren.

Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Jun 03, 2024 pm 12:19 PM

Das Sichern und Wiederherstellen einer MySQL-Datenbank in PHP kann durch Befolgen dieser Schritte erreicht werden: Sichern Sie die Datenbank: Verwenden Sie den Befehl mysqldump, um die Datenbank in eine SQL-Datei zu sichern. Datenbank wiederherstellen: Verwenden Sie den Befehl mysql, um die Datenbank aus SQL-Dateien wiederherzustellen.

Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein? Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein? Jun 02, 2024 pm 02:26 PM

Wie füge ich Daten in eine MySQL-Tabelle ein? Mit der Datenbank verbinden: Stellen Sie mit mysqli eine Verbindung zur Datenbank her. Bereiten Sie die SQL-Abfrage vor: Schreiben Sie eine INSERT-Anweisung, um die einzufügenden Spalten und Werte anzugeben. Abfrage ausführen: Verwenden Sie die Methode query(), um die Einfügungsabfrage auszuführen. Bei Erfolg wird eine Bestätigungsmeldung ausgegeben.

So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 Dec 09, 2024 am 11:42 AM

Eine der wichtigsten Änderungen, die in MySQL 8.4 (der neuesten LTS-Version von 2024) eingeführt wurden, besteht darin, dass das Plugin „MySQL Native Password“ nicht mehr standardmäßig aktiviert ist. Darüber hinaus entfernt MySQL 9.0 dieses Plugin vollständig. Diese Änderung betrifft PHP und andere Apps

Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Jun 02, 2024 pm 02:13 PM

So verwenden Sie gespeicherte MySQL-Prozeduren in PHP: Verwenden Sie PDO oder die MySQLi-Erweiterung, um eine Verbindung zu einer MySQL-Datenbank herzustellen. Bereiten Sie die Anweisung zum Aufrufen der gespeicherten Prozedur vor. Führen Sie die gespeicherte Prozedur aus. Verarbeiten Sie die Ergebnismenge (wenn die gespeicherte Prozedur Ergebnisse zurückgibt). Schließen Sie die Datenbankverbindung.

Wie erstelle ich eine MySQL-Tabelle mit PHP? Wie erstelle ich eine MySQL-Tabelle mit PHP? Jun 04, 2024 pm 01:57 PM

Das Erstellen einer MySQL-Tabelle mit PHP erfordert die folgenden Schritte: Stellen Sie eine Verbindung zur Datenbank her. Erstellen Sie die Datenbank, falls sie nicht vorhanden ist. Wählen Sie eine Datenbank aus. Tabelle erstellen. Führen Sie die Abfrage aus. Schließen Sie die Verbindung.

Der Unterschied zwischen Oracle-Datenbank und MySQL Der Unterschied zwischen Oracle-Datenbank und MySQL May 10, 2024 am 01:54 AM

Oracle-Datenbank und MySQL sind beide Datenbanken, die auf dem relationalen Modell basieren, aber Oracle ist in Bezug auf Kompatibilität, Skalierbarkeit, Datentypen und Sicherheit überlegen, während MySQL auf Geschwindigkeit und Flexibilität setzt und eher für kleine bis mittlere Datensätze geeignet ist. ① Oracle bietet eine breite Palette von Datentypen, ② bietet erweiterte Sicherheitsfunktionen, ③ ist für Anwendungen auf Unternehmensebene geeignet; ① MySQL unterstützt NoSQL-Datentypen, ② verfügt über weniger Sicherheitsmaßnahmen und ③ ist für kleine bis mittlere Anwendungen geeignet.

Wie lösche ich Daten aus einer MySQL-Tabelle mit PHP? Wie lösche ich Daten aus einer MySQL-Tabelle mit PHP? Jun 05, 2024 pm 12:40 PM

PHP bietet die folgenden Methoden zum Löschen von Daten in MySQL-Tabellen: DELETE-Anweisung: Wird zum Löschen von Zeilen, die Bedingungen entsprechen, aus der Tabelle verwendet. TRUNCATETABLE-Anweisung: Wird zum Löschen aller Daten in der Tabelle verwendet, einschließlich automatisch inkrementierter IDs. Praxisfall: Sie können Benutzer mithilfe von HTML-Formularen und PHP-Code aus der Datenbank löschen. Das Formular übermittelt die Benutzer-ID und der PHP-Code verwendet die DELETE-Anweisung, um den Datensatz, der der ID entspricht, aus der Benutzertabelle zu löschen.

See all articles