>  기사  >  백엔드 개발  >  PHP는 Redis 기본 데이터 구조를 구현합니다.

PHP는 Redis 기본 데이터 구조를 구현합니다.

不言
不言원래의
2018-07-04 17:42:421762검색

이 글은 주로 PHP로 구현된 Redis의 기본 데이터 구조를 소개하며, 이는 특정 참조 가치가 있습니다. 이제 모든 사람들과 공유합니다. 도움이 필요한 친구들은 이를 참조할 수 있습니다.

Redis 기본 데이터 구조 및 PHP 구현


  • Redis( REmote DIctionary Server)는 ANSI C 언어로 작성된 오픈소스 로그형 Key-Value 데이터베이스로, BSD 프로토콜을 준수하고, 네트워크를 지원하며, 메모리 기반 및 영속성이 가능하며, 다국어 API를 제공합니다 ​​

  • Redis 일반적으로 값은 String, Hash, Map, List, Set, Sorted 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 키( Key)

// 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는 문자열 형식의 필드와 값의 매핑 테이블입니다. Hash는 특히 개체를 저장하는 데 적합합니다.

  • Redis에서는 2^(32)-1(40억 개 이상) 키-값 쌍을 저장할 수 있습니다

//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 목록(목록)

  • Redis 목록은 간단한 문자열 목록이며

    삽입 순서로 정렬됩니다. , 요소 목록의 헤드(왼쪽) 또는 테일(오른쪽)을 추가할 수 있습니다

  • Redis의 목록은 최대 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' Set은 정렬되지 않은 문자열 유형의 모음입니다. 집합 멤버는 고유합니다. 즉,

    중복 데이터가 집합에 나타날 수 없습니다

  • Redis의 집합은 해시 테이블을 통해 구현되므로 추가, 삭제 및 검색의 복잡성은 O(1)

  • A입니다. 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 주문 세트(sorted set)

  • Redis 주문 세트도 세트와 마찬가지로 문자열 유형 요소입니다. 중복 멤버 허용

  • 차이점은 각 요소가 이중 유형 점수

    와 연결된다는 것입니다. 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는 카디널리티 통계를 수행하는 데 사용되는 알고리즘입니다(
  • 데이터의 고유 요소 수를 계산합니다). set

    ) , HyperLogLog의 장점은 입력 요소의 수나 양이 매우 클 때 밑수를 계산하는 데 필요한 공간이 항상 고정되어 있고 매우 작다는 것입니다.

  • Redis에서는 각 HyperLogLog 키의 비용이 12에 불과합니다. KB의 메모리를 사용하면 2^(64)개에 가까운 다양한 요소의 카디널리티를 계산할 수 있습니다. 이는 요소가 많을수록 카디널리티를 계산할 때 더 많은 메모리가 소비되는 세트와는 뚜렷한 대조를 이룹니다. HyperLogLog는 입력 요소를 기반으로 카디널리티만 계산하고 입력 요소 자체를 저장하지 않기 때문에 HyperLogLog는 다음과 같이 반환할 수 없습니다. set.입력의 다양한 요소
  • $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에서 Define과 Const의 차이점

PHP와 웹 페이지 간의 상호 작용

ob_start PHP에서 사용 분석

위 내용은 PHP는 Redis 기본 데이터 구조를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.