首页 > 编程 > PHP > 正文

PHP实现Redis基本数据结构

2020-03-22 19:01:52
字体:
来源:转载
供稿:网友
这篇文章主要介绍了关于PHP实现Redis基本数据结构,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

Redis基本数据结构与PHP实现

Redis(REmote DIctionary Server)是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

Redis通常被称为数据结构服务器,因为值(html' target='_blank'>value)可以是字符串(String),哈希(Map),列表(list),集合(Set),和有序集合(sorted sets)等类型

Redis配置与连接
// Redis.phpreturn [ 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个元素

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

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表