1、环境
PHPStudy和RedisDesktopManager
PHPStudy的redis版本
RedisDesktopManager版本
注意:
redis3.0之后不支持Windows版本了。
目前想玩redis5.0版本可以通过Linux解压编译。
2、参考runood 教程来学习
Redis 数据类型
Redis支持五种数据类型:
string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
2.1 String(字符串)
string是 redis 最基本的类型,一个 key 对应一个 value。最大能存储 512MB。
2.2 Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对 象。每个 hash 可以存储 232 -1 键值对(40多亿)。
HMSET 设置了两个 field=>value 对, HGET 获取对应 field 对应的 value。
2.3 List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头 部(左边)或者尾部(右边)。列表最多可存储 232 - 1 元素 (4294967295, 每个列表可 存储40多亿)。
2.4 Set(集合)
Redis 的 Set 是 string 类型的无序集合。不允许重复的成员。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
sadd,smembers
sadd命令会添加新元素到SET,可以看到一次性可以添加一个或多个元素。
smembers可以获取set里所有的元素,但是每次调用得到结果的顺序是无法保证的。
注意:得到结果,跟输入的顺序是不一样的。所以这是集合是无序的。
Redis 的 SCARD 命令用于返回集合 KEY 的基数(集合中元素的数量)。
2.5 sorted set(有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的 成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
2.6 Redis HyperLogLog
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数 量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身, 所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
pfadd和pfcount,一个是增加计数,一个是获取计数。
pfmerge,用于将两个pf累加形成一个新的pf
注意:
1、HyperLogLog的计数统计是有一定的误差的,误差最大在1%以下。
2、HyperLogLog数据结构需要占据12KB的存储空间,所以我们在使用的时候得注意,如果数据量非常小我们可以选择其他方式,但是如果是数据量非常大,那么我们这个数据结构就非常有价值了。但是我们也不要太过于担心它的消耗,一开始初始的时候是没有这么大的,在计数比较小时他是采用稀疏矩阵来进行存储,空间占用率还是很小的,只有到达一定阈值后才会转变成稠密矩阵空间才会到达12KB。
其他:
命令pf前缀的由来
我们使用hash的时候都是h开头hadd,set都是sadd,zset都是z开头,那么我们的HyperLogLog为啥是个pf呢?
HyperLogLog这个数据结构的发明人Philippe Flajolet, pf 是他的名字的首字母缩写。
引用的上文链接:https://blog.csdn.net/mango_love/article/details/106394667