PHP实现Redis基本数据结构

不言
发布: 2018-07-04 17:42:42
原创
1974人浏览过

这篇文章主要介绍了关于php实现redis基本数据结构,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

Redis基本数据结构与PHP实现


Redis(REmote DIctionary Server)是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的APIRedis通常被称为数据结构服务器,因为值(value)可以是字符串(String),哈希(Map),列表(list),集合(Set),和有序集合(sorted sets)等类型

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)

// 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)

  • Redis Hash是一个string类型的field和value的映射表,hash特别适合用于存储对象

  • Redis中每个hash可以存储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 列表(List)

  • Redis列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素列表的头部(左边)或者尾部(右边)

  • Redis中一个列表最多可以存储2^(32)-1个元素

    立即学习PHP免费学习笔记(深入)”;

// 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集合(Set)

  • Redis的Set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据

  • Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是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有序集合(sorted set)

  • Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员

  • 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序

  • 有序集合的成员是唯一的,但分数(score)却可以重复

  • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是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 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^(64)个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比

  • 因为 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中文网!

相关推荐:

PHP中Define和Const的区别

PHP与Web页面的交互

PHP中的ob_start用法解析

以上就是PHP实现Redis基本数据结构的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号