String: 一般做一些复杂的计数功能的缓存
List: 做简单的消息队列的功能
Hash: 单点登录
Set: 做全局去重的功能
SortedSet: 做排行榜应用,取TopN操作;延时任务;做范围查找
| 类型 | 简介 | 特性 | 场景 |
| --- | --- | --- | --- |
| String(字符串) | Redis的字符串是动态字符串,是可以修改的字符串。<br/>它的内部表示就是一个字符数组,内部结构的实现类似于Java的ArrayList。<br/>它的内部结构是一个带长度信息的字节数组|可以包含任何数据,比如jpg图片或者序列化的对象,规定字符串的长度不得超过512MB。<br/>Redis的字符串有两种存储方式,在长度特别短时,使用embstr形势存储,而长度超过44字节时候,使用raw形势存储。|1、访问量统计:每次访问博客和文章使用 INCR 命令进行递增。<br/>2、将数据以二进制序列化的方式进行存储|
| Hash(字典)| Redis的字典相当于Java语言里面的HashMap<br/>字典结构内部包含了两个Hashtable,通常情况下只有一个Hashtable是有值的,<br/>但是在字典扩容缩容时候,需要重新分配新的Hashtable,然后进行渐进式搬迁,这时候两个Hashtable存储的分别是旧的Hashtable和新的Hashtable;待搬迁结束后,旧的Hashtable被删除,新的Hashtable取而代之。|适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)。<br/>大字典的扩容是比较耗时的,需要重新申请新的数组,然后将旧字典所有链表中的元素重新挂接到新的数组下面,这是一个O(n)级别的操作,作为单线程的Redis很难承受这样耗时的过程,所以Redis使用**渐进式rehash**小步搬迁虽然慢一点,但是肯定可以搬完。|1、存储、读取、修改对象属性,比如:用户(姓名、性别、爱好),文章(标题、发布时间、作者、内容)|
| List(列表) | Redis的列表相当于Java的LinkedList<br/>List的结构底层实现不是一个简单的LinkedList,而是快速链表(quicklist)。<br/>首先在列表元素较少的情况下,会使用一块连续的内存存储,这个结构是ziplist,即压缩列表。它将所有的元素彼此紧挨着一起存储,分配的是一块连续的内存;当数据量比较多的时候才会改成quicklist。|增删快,提供了操作某一段元素的API<br/>普通的链表需要的附加指针空间太大,会浪费空间,加重内存的碎片化。<br/>Redis将链表和ziplist结合起来组成了quicklist,也就是将多个ziplist使用双向指针串联起来使用,既满足了快速的插入删除性能,又不会出现太大的空间冗余|1、最新消息排行等功能(比如朋友圈的时间线)<br/>2、消息队列|
| Set(集合) | Redis的集合相当于Java语言里面的HashSet,内部的键值对是无须的、唯一的<br/>Set的结构底层实现是字典,只不过所有的value都是NULL,其他的特性和字典一摸一样。|1、添加、删除、查找的复杂度都是O(1) <br/>2、为集合提供了求交集、并集、差集等操作。<br/>当set集合容纳的元素都是整数并且元素个数较少时,Redis会使用intset来存储集合元素。intset是紧凑的数组结构,同时支持16位,32位和64位整数|1、共同好友<br/>2、利用唯一性,统计访问网站的所有独立ip<br/>3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐|
| Sorted Set(有序集合) | Redis有序列表类似于Java的SortedSet和HashMap的结合体,<br/>一方面是一个set,保证内部value的唯一性,另一方面可以给每个value赋予一个score,代表这个value的排序权重。<br/>它的内部实现是一个Hash字典 + 一个跳表。|数据插入集合时,已经进行天然排序<br/>Redis的跳表共有64层,能容纳2的64次方个元素。<br/>Redis之所以用跳表来实现有序集合<br/>1\. 插入、删除、查找以及迭代输出有序序列这几个操作,红黑树都能完成,时间复杂度跟跳表是一样的。但是按照区间来查找数据,红黑树的效率就没有跳表高<br/>2\. 跳表更容易代码实现,比起红黑树来说还是好懂、好写很多,可读性好,不容易出错<br/>3\. 跳表更加灵活,可以通过改变索引构建策略,有效平衡执行效率和内存消耗|1、排行榜,取TopN操作<br/>2、带权重的消息队列|
- 第一章 PHP基础
- PHP介绍
- 如何理解PHP是弱类型语言
- 超全局变量
- 字符串处理函数
- 常用数组函数
- 文件处理函数
- 常用时间函数
- 日历函数
- 常用url处理函数
- 易混淆函数区别(面试题常见)
- 时间戳
- 第二章 PHP进阶
- PSR规范
- RESTFUL规范
- 面向对象
- 三大基本特征和五大基本原则
- 访问权限
- static关键字
- static
- 静态变量与普通变量
- 静态方法与普通方法
- const关键字
- final关键字
- abstract关键字
- self、$this、parent::关键字
- 接口(interface)
- trait关键字
- instanceof关键字
- 魔术方法
- 构造函数和析构函数
- 私有属性的设置获取
- __toString()方法
- __clone()方法
- __call()方法
- 类的自动加载
- 设计模式详解
- 关于设计模式的一些建议
- 工厂模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 区别和适用范围
- 策略模式
- 单例模式
- HTTP
- 定义
- 特点
- 工作过程
- request
- response
- HTTP状态码
- URL
- GET和POST的区别
- HTTPS
- session与cookie
- 排序算法
- 冒泡排序算法
- 二分查找算法
- 直接插入排序算法
- 希尔排序算法
- 选择排序算法
- 快速排序算法
- 日期相关的类
- DateTimeInterface接口
- DateTime类
- DateTimeImmutable类
- DateInterval类
- DateTimeZone类
- DatePeriod类
- format参数格式
- DateInterval的format格式化参数
- 第三章 PHP框架
- ThinkPHP框架
- tp3.2
- tp5.0
- CodeIgniter框架
- CodeIgniter 3
- CodeIgniter 4
- 第四章 数据库
- MYSQL
- 事务(重点)
- 索引
- 存储过程
- 触发器
- 视图
- 导入导出数据库
- 优化mysql数据库的方法
- MyISAM与InnoDB区别
- 外连接、内连接的区别
- 物理文件结构
- 第五章 LNMP
- LNMP环境搭建
- 搭建方法
- 配置文件目录
- 服务器管理系统
- 宝塔(Linux)
- 一键安装包LNMP1.5
- LNMP1.5:添加、删除站点
- LNMP1.5:php多版本切换
- LNMP1.5 部署 thinkphp项目
- Operation not permitted解决方法
- Nginx
- Nginx的产生
- 正向代理和反向代理
- 负载均衡
- Linux常用命令
- 目录与文件相关命令
- 目录操作命令
- 文件编辑命令
- 文件查看命令
- 文件查找命令
- 文件权限命令
- 文件上传下载命令
- 用户和群组相关命令
- 用户与用户组的关系
- 用户相关的系统配置文件
- 用户相关命令
- 用户组相关命令
- 压缩与解压相关命令
- .zip格式
- .tar.gz格式
- .gz格式
- 查看系统版本
- cpuinfo详解
- meminfo详解
- getconf获取系统信息
- 磁盘空间相关命令
- 查看系统负载情况
- 系统环境变量
- 网络相关命令
- ip命令详解
- ip命令格式详解
- ip address命令详解
- ip link命令详解
- ip rule命令详解
- ip route命令详解
- nslookup命令详解
- traceroute命令详解
- netstat命令详解
- route命令详解
- tcpdump命令详解
- 系统进程相关命令
- ps命令详解
- pstree命令详解
- kill命令详解
- 守护进程-supervisord
- 性能监控相关命令
- top命令详解
- iostat命令详解
- pidstat命令详解
- iotop命令详解
- iftop命令详解
- 定时任务相关命令
- ssh登录远程主机
- ssh口令登录
- ssh公钥登录
- ssh带密码登录
- ssh端口映射
- ssh配置文件
- ssh安全设置
- 历史纪录
- history命令详解
- linux开启操作日志记录
- 第六章 拓展
- 大流量解决方案
- git
- git与svn的区别
- git原理
- git初始化本地仓库-https
- git初始化仓库-ssh
- composer安装与使用
- 消息队列
- PHP-CURL
- phpExcel的安装与使用
- 第七章 缓存
- redis
- redis的数据类型和应用场景
- redis持久化
- RDB持久化
- AOF持久化
- 第八章 常见网络攻击类型
- CSRF攻击
- XSS攻击
- SQL注入
- Cookie攻击
- 第九章 项目经验
- 图片上传项目实例
- 原生php上传方法实例
- base64图片流
- tp5的上传方法封装实例
- 多级关系的递归查询
- 数组转树结构
- hinkphp5.1+ajax实现导出Excel
- JS 删除数组的某一项
- 判断是否为索引数组
- ip操作
