ホームページ  >  記事  >  バックエンド開発  >  PHP は Redis の基本データ構造を実装します

PHP は Redis の基本データ構造を実装します

不言
不言オリジナル
2018-07-04 17:42:421764ブラウズ

この記事では、PHP で実装された Redis の基本的なデータ構造を中心に紹介します。参考になる価値があるので、皆さんに共有します。必要な友人は参考にしてください。

Redis の基本的なデータ構造と PHP の実装


  • Redis (REmote DIctionary Server) は、ANSI C 言語で書かれたオープン ソースのログ タイプで、BSD プロトコルに準拠し、ネットワークをサポートし、以下に基づいています。 Key-Value データベースと複数言語の API を提供

  • #Redis は、値 (value) が文字列 (String) になる可能性があるため、データ構造サーバーと呼ばれることがよくあります。ハッシュ (Map) )、リスト (list)、コレクション (Set)、および順序付きセット (ソートされたセット) およびその他のタイプ

##Redis の構成と接続

// 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 キー (キー)

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

Redis 文字列 (文字列)

// 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 ハッシュ (ハッシュ)

  • Redis ハッシュは文字列型 フィールドと値のマッピング テーブル、ハッシュは

    オブジェクトの保存に特に適しています

  • Redis の各ハッシュは 2^(32)-1(以上) を保存できます400 億) のキーと値のペア

//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 list(List)

  • Redis リストは単純な文字列リストです。 ,

    挿入順に並べ替えます、要素リストの先頭 (左) または末尾 (右) を追加できます

  • Redis のリストには最大で 6 個のリストを保存できます。 2^( 32)-1 要素

// 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 セット (セット)

  • Redis のセットのタイプ文字列シーケンスのコレクション。コレクションのメンバーは一意です。つまり、

    重複データがコレクションに現れることはできません

  • Redis のコレクションはハッシュ テーブルを通じて実装されるため、 の追加と削除により検索が複雑になります。 is O(1)

  • Redis のコレクションには最大 2^(32)-1 のメンバーを保存できます##
    // redis set 无序集合
    $redis->sadd($key, 'val1', 'val2'); // 向集合中添加多个元素
    $redis->scard($key); // 获取集合元素个数
    $redis->spop($key); // 移除并获取集合内随机一个元素
    $redis->srem($key, 'val1', 'val2'); // 移除集合的多个元素
    $redis->sismember($key, 'val1'); // 判断元素是否存在于集合内

    Redis順序付きセット (ソート済みセット)

Redis 順序付きセットも、セットと同様に文字列型要素のコレクションであり、重複するメンバーは許可されません

違いは、各要素が
    double 型スコア
  • に関連付けられることです。 Redis はスコアを使用してセットのメンバーを小さいものから大きいものに並べ替えます

  • #順序付けられたセットのメンバーは一意ですが、スコアは繰り返すことができます
  • コレクションはハッシュ テーブルを通じて実装されるため、追加、削除、検索の複雑さは O(1) です。コレクション内のメンバーの最大数は 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 はい カーディナリティ統計を行うために使用されるアルゴリズム (
データ セット内の非反復要素の数の計算
) HyperLogLog の利点は、入力要素の数または量が非常に大きい場合に、カーディナリティの計算に必要なスペースは常に固定で非常に小さいです。

    Redis では、約 2^(64) 個の異なる要素のカーディナリティを計算するのに各 HyperLogLog キーに必要なメモリは 12 KB だけです。 。これは、要素が多いほどカーディナリティの計算時に消費されるメモリが増えるコレクションとは対照的です。
  • HyperLogLog は入力要素に基づいてカーディナリティのみを計算するため、入力要素自体を保存しないため、HyperLogLog は各入力要素をコレクションのように返すことはできません。

  • $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)

    以上がこの記事の全内容です。皆様の学習に役立ちます。関連コンテンツにもご注目ください。PHP 中国語 Web サイト!
  • 関連する推奨事項:

PHP の Define と Const の違い


PHP と Web ページ間の相互作用


PHP

での ob_start 使用状況分析

以上がPHP は Redis の基本データ構造を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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