PHP中使用redis的基础

Redis 是开源免费的,是一个高性能的key-value数据库。

Redis特点

Redis 与其他 key – value 缓存产品有以下三个特点:

1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

3.Redis支持数据的备份,即master-slave模式的数据备份。

redis优势:性能高、丰富的数据类型、原子性、丰富的特性

redis支持5种数据类型:string字符串、hash哈希、list列表、set集合、zset有序集合

单机redis支持多个数据库,但是多个数据库是隔离的,不能共享,如果是集群,就没有数据库的概念

redis键命令https://redis.io/commands

常用:

  • 是否存在:exists

  • 删除:del

  • 序列化:dump

  • 随机返回key:randomkey

  • 修改key名:rename

redis发布订阅

redis发布订阅(pub/sub)是一种消息通信模式:发送者发送消息,订阅者接收消息

redis客户端可以订阅任意数量的频道

当有新消息通过PUBLISH命令发送给频道时,这个消息就会被发送给订阅这个频道的多个客户端

订阅subscribe,发布publish

redis事务

redis事务一次可以执行多个命令,并且:

批量操作在发送EXEC命令前被放入队列缓存

收到EXEC命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行

在事务执行过程中,其他客户端提交的命令请求不会插入到事务执行命令序列中

一个事务从开始到执行会经历三个阶段:开始事务->命令入列->执行事务

单个redis命令的执行是原子性的,但是redis事务的执行不是原子性的。事务可以理解为一个打包执行的批量执行脚本,但是批量指令的执行不是原子化的操作,所以中间某条指令的失败不会导致前面已经执行指令的回滚,也不会造成后续指令的不执行。

客户端连接

redis通过监听一个tcp端口或者unix socket的方式来接收来自客户端的连接,当一个连接建立后,redis内部会进行以下一些操作:

1.首先,客户端socket会被设置为非阻塞模式,因为redis在网络事件处理上采用的是非阻塞多路复用模型

2.然后为这个socket设置TCP_NODELAY属性,禁用Nagle算法(允许小包发送,性能高、延时少)

3.然后创建一个可读的文件事件用于坚定这个客户端socket的数据发送

redis是一种基于客户端-服务端模型以及请求/相应协议的TCP服务,意味着通常情况下请求会遵循以下步骤:

客户端向服务端发送一个查询请求,并且监听socket返回,通常是以阻塞模式,等待服务端响应

服务端处理命令,并且将结果返回客户端

管道技术

redis的管道技术,在服务端未响应的时候,客户端可以持续向服务端发送请求,并最终一次性读取所有的服务端响应。管道技术最显著的优势是提高了redis的服务性能

redis分区

分区是分割数据到多个redis实例的处理过程,因此每个实例只保存key的一个子集

分区的优势:

  • 利用多台计算机的内存,构造更大的数据库

  • 通过多核和多台计算机,允许扩展计算能力

  • 通过多台计算机和网络适配器,允许扩展网络带宽

分区的不足:

  • 涉及多个key的操作不被支持

  • 设计多个key的redis事务不能使用

  • 使用分区的时候,数据处理比较复杂

增加或者删除容量时也比较复杂。redis集群大多数支持在运行时增加、删除节点的透明数据平衡能力,但是类似于客户端分区、代理等其他系统,则不支持这项特性

分区类型:范围分区&哈希分区

范围分区的不足,是需要一个区间范围到实例的映射表,这个表要被管理,同时还需要各种对象的映射表

内容来源于runoob.com

    原文作者:赵加美
    原文地址: https://www.jianshu.com/p/224ea063eead
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞