Heim  >  Artikel  >  Backend-Entwicklung  >  PHP implementiert die grundlegende Datenstruktur von Redis

PHP implementiert die grundlegende Datenstruktur von Redis

不言
不言Original
2018-07-04 17:42:421783Durchsuche

Dieser Artikel stellt hauptsächlich die in PHP implementierte grundlegende Datenstruktur von Redis vor, die einen gewissen Referenzwert hat. Jetzt kann ich ihn mit allen teilen, die ihn benötigen.

Die grundlegende Datenstruktur und PHP-Implementierung von Redis


  • Redis (REmote DIctionary Server) ist ein Open-Source-Protokolltyp, der in der Sprache ANSI C geschrieben ist, dem BSD-Protokoll entspricht, das Netzwerk unterstützt und Speicher sein kann -basierte und persistente Schlüsselwertdatenbank und bietet APIs in mehreren Sprachen

  • Redis wird oft als Datenstrukturserver bezeichnet, da der Wert (Wert) eine Zeichenfolge (String) sein kann. , ein Hash (Karte), Liste, Menge und geordnete Mengen (sortierte Mengen) und andere Typen

Redis-Konfiguration und -Verbindung

// Redis.php
return [
'host' => '127.0.0.1',
'port' => '6379'
];

// RedisTest.php
$redis = new redis();
$redisConf = include 'Redis.php';
$redis->connect($redisConf['host'], $redisConf['port']);

Redis-Schlüssel (Schlüssel)

// redis key操作
$redis->exists($key); // 判断key值是否存在
$redis->expire($key, 10); // 设置key在10秒后过期

Redis String (String)

// redis string 字符串
$redis->set($key, $val);
$redis->incr($key); // key值+1,除非val是整数,否则函数执行失败
$redis->decr($key); // key值-1,同上
$redis->append($key, "ue"); // 追加key值内容
$redis->strlen($key); // 返回key值的长度
// 当第一次设置key值后,key值的数据类型就不能改变了。
$redis->del($key); // 删除key值

Redis Hash (Hash)

  • Redis Hash ist eine Mapping-Tabelle vom Typ String aus Feld und Wert eignet sich Hash besonders zum Speichern von Objekten

  • Jeder Hash in Redis kann 2^(32)-1 (mehr als 40 Milliarden) Schlüssel-Wert-Paare speichern

//redis hash 哈希
$redis->hset($key, 'field1', 'val1'); // 设置一个key-value键值对
$redis->hmset($key, array('field2'=>'val2', 'field3'=>'val3')); // 设置多个k-v键值对
$redis->hget($key, 'field2'); // 获取hash其中的一个键值
$redis->hmget($key, array('field2', 'field1')); // 获取hash的多个键值
$redis->hgetall($key); // 获取hash中所有的键值对
$redis->hlen($key); // 获取hash中键值对的个数
$redis->hkeys($key); // 获取hash中所有的键
$redis->hvals($key); // 获取hash中所有的值
Redis-Liste (Liste)

  • Redis-Liste ist eine einfache String-Liste,

    Sortieren nach Einfügereihenfolge , Sie können den Kopf (links) oder das Ende (rechts) einer Elementliste hinzufügen

  • Eine Liste in Redis kann bis zu 2^( 32)-1 speichern Element

// redis list 列表
$index = $start = 0;
$redis->lpush($key, 'val1', 'val2'); // 在list的开头添加多个值
$redis->lpop($key); // 移除并获取list的第一个元素
$redis->rpop($key); // 移除并获取list的最后一个元素 $stop = $redis->llen($key) - 1; // 获取list的长度
$redis->lindex($key, $index); // 通过索引获取list元素
$redis->lrange($key, $start, $stop); // 获取指定范围内的元素
Redis-Sammlung (Set)

  • Redis' Set ist vom Typ String-Sequenzsammlung. Set-Mitglieder sind eindeutig, was bedeutet, dass

    doppelte Daten nicht im Set erscheinen können

  • Sammlungen in Redis werden über Hash-Tabellen implementiert, sodass das Hinzufügen und Löschen die Suchkomplexität erhöht O(1)

  • Eine Sammlung in Redis kann bis zu 2^(32)-1 Mitglieder speichern

// redis set 无序集合
$redis->sadd($key, 'val1', 'val2'); // 向集合中添加多个元素
$redis->scard($key); // 获取集合元素个数
$redis->spop($key); // 移除并获取集合内随机一个元素
$redis->srem($key, 'val1', 'val2'); // 移除集合的多个元素
$redis->sismember($key, 'val1'); // 判断元素是否存在于集合内
Redis bestellt Menge (sortierte Menge)

  • Redis geordnete Menge ist wie eine Menge auch eine Sammlung von Elementen vom Typ Zeichenfolge, und doppelte Mitglieder sind nicht zulässig

  • Der Unterschied besteht darin, dass jedem Element

    eine doppelte Typbewertung zugeordnet wird. Redis verwendet Scores, um die Mitglieder der Menge von klein nach groß zu sortieren

  • Die Mitglieder der geordneten Menge sind einzigartig, aber die Punktzahl kann wiederholt werden

  • Sätze werden durch Hash-Tabellen implementiert, sodass die Komplexität des Hinzufügens, Löschens und Suchens O(1) beträgt. Die maximale Anzahl von Mitgliedern in der Sammlung beträgt 2^(32)-1

// redis sorted set 有序集合
// 有序集合里的元素都和一个分数score关联,就靠这个分数score对元素进行排序
$redis->zadd($key, $score1, $val1, $score2, $val2); // 向集合内添加多个元素
$redis->zcard($key); // 获取集合内元素总数
$redis->zcount($key, $minScore, $maxScore); // 获取集合内分类范围内的元素
$redis->zrem($key, $member1, $member2); // 移除集合内多个元素
Redis HyperLogLog

  • Redis HyperLogLog Ja Ein Algorithmus zur Erstellung von Kardinalitätsstatistiken (

    Berechnung der Anzahl sich nicht wiederholender Elemente im Datensatz). Der Vorteil von HyperLogLog besteht darin, dass, wenn die Anzahl oder das Volumen der Eingabeelemente sehr, sehr groß ist, Der zur Berechnung der Kardinalität erforderliche Platz ist immer fest und klein

  • In Redis kostet jeder HyperLogLog-Schlüssel nur 12 KB Speicher und die Kardinalität von fast 2^(64) verschiedenen Elementen kann berechnet werden. Dies steht in scharfem Gegensatz zu einer Sammlung, bei der bei der Berechnung der Kardinalität umso mehr Speicher verbraucht wird, je mehr Elemente vorhanden sind

  • Da HyperLogLog die Kardinalität nur basierend auf den Eingabeelementen berechnet, und speichert nicht die Eingabeelemente selbst. Daher kann HyperLogLog nicht jedes Eingabeelement wie eine Sammlung zurückgeben.

$redis->pfAdd('key1', array('elem1', 'elem2'));// 添加指定元素到HyperLogLog中
$redis->pfAdd('key2', array('elem3', 'elem2'));// 将多个HyperLogLog合并为一个HyperLogLog
$redis->pfMerge('key3', array('key1', 'key2'));
$redis->pfCount('key3'); // 返回HyperLogLog的基数估计值: int(3)
Das Obige ist der gesamte Inhalt dieses Artikels Hilfreich für das Lernen aller. Bitte beachten Sie weitere verwandte Inhalte auf der chinesischen PHP-Website.


Verwandte Empfehlungen:

Der Unterschied zwischen Define und Const in PHP

Interaktion zwischen PHP und Webseiten

Analyse der ob_start-Nutzung in PHP

Das obige ist der detaillierte Inhalt vonPHP implementiert die grundlegende Datenstruktur von 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