PHP之Redis

1 篇文章 0 订阅

一、Redis概念
Redis是远程的。它有客户端和服务端两个部分,客户端和服务端可以部署在两个不同的机器上,它们之间是通过Redis自定义的协议进行传输和交互的,我们通常说的Redis是指Redis的服务端,只有在特殊具体的错误定位时,才需要说Redis的客户端出了什么什么问题。
其次,Redis是基于内存的。它所有的数据和结构都处在内存中,所以这就代表了Redis所有的操作都是非常高速,它的性能远远高于硬盘存储型的Mysql。但是,正式因为它所有的数据和结构都存储于内存中,所以它也是一个比较吃内存的软件。
Redis是非关系型数据库。它的本质是一个数据库,存储数据的,但是它和Mysql是不同的,mysql是关系型数据库。关系型数据库在存储之前必须定义好数据字典,后续的存储数据按照数据字典进行存储,而Redis就不需要定义数据字典

Redis的应用场景
(1)缓存。鉴于Redis的高性能,通常会做的一个事情,是把它当作缓存来使用。当系统接口速度比较慢时,可以将某些接口的而某些数据缓存起来,下次进行请求的时候,就不需要去mysql数据库中做比较耗时的SQL操作了,而是直接去Redis缓存中将我们需要的数据库数据提取出来,这个是提高系统性能最常用的方法之一。
(2)队列。Redis中提供了List结构,这个结构中提供了pop()和push()操作,Redis保证了pop和push是原子性,基于这个结构和原子性,我们就可以将Redis当作队列来使用。使用push()插入队列元素,使用pop()来弹出队列的元素
(3)数据存储。意思就是可以直接将Redis当作数据存储来使用,所有的增删改查都直接从Redis中进行操作,不需要再用Mysql来进行数据存储。可以这么做的基础是Redis有非常完备的硬盘持久化的机制。它有两种持久化的机制,配合这两种持久化机制,就可以将Redis数据定期持久化到硬盘中,这样就保证了Redis数据的完整性和安全性。
二、Redis安装
1,安装服务器环境:linux/CentOS release 6.8
2,下载Redis源码(http://download.redis.io/release/)可以通过wget下载
3,预装软件(gcc、tcl)gcc是C语言编译器,Redis是基于C语言写的,所以必须安装gcc。Redis的一些测试组件是基于tcl编写的,所以也需要安装tcl(它俩可以通过yum来进行安装)
服务器端安装(Redis Server)

//解压源码
#tar -xf redis-2.8.2.13.tar.gz
//进入源码目录
#make
#make install(这个是将生成的二进制文件放到usr/local/bin目录下)
//启动Redis
//一般我们启动redis-server,都会使用一个配置文件来配合redis-server启动,这个配置文件在源码中可以找到一个基本原型,这个原型在源码目录下的redis.conf,我们可以将它拷贝到一个目录。这个配置文件中有许多启动项,其中,做主要的是我们要修改一些配置项     打开redis.conf
1,daemonize no这个选项是配置redis是前台启动还是后台启动,一般我们会选择后台启动redis,所以**将no改成yes**
2,修改默认端口(6379),为了安全考虑
其它地方不需要修改了

#/usr/local/bin/redis-server 这里跟着你刚刚给redis.conf放置的路径
//查看redis-server是否启动
#ps aux|grep redis-server

客户器端安装(Redis Client)
通过redis-client的命令来登录redis-server

#redis-cli -h 127.0.0.1 -p 这里加上你刚刚设置的端口

登录上之后,可以使用info命令查看redis-server当前状态
三、Redis的数据类型
这里写图片描述
关于这五种数据类型的使用,点击这里
四、PHP的redis扩展安装

#wget https://github.com/phpredis/phpredis/archive/develop.zip
//可以使用php -m查看你当前机器上的php安了哪些扩展
//检查是否安装了phpize和php-config两个扩展
phpize工具是一会儿编译出configure文件的时候必须要用到
php-config这个工具是编译时要用到的工具
这两个工具可以通过yum install来安装,但是你应该这样
#yum install php-devel
因为php-devel是php的扩展开发包,这里边就包含了那两个工具

具体安装步骤:

#unzip develop.zip//解压之后,要进入解压出来的目录,然后执行下边的命令
#phpize
#./configure--with-php-config=/usr/bin/php-config
#make
#make install
然后修改php.ini,添加redis扩展,添加下边这一行
extension=redis.so
//告诉一个小窍门,直接使用php --ini就可以看到php.ini的路径
使用php -m查看redis扩展是否成功安装

五、PHP操作redis的五种类型
phpredis文档地址
注意:
phpredis提供的redis类及其它的所有的类,它的命名空间都在根下,所以如果在其它命名空间下使用Redis类,尽量加上根目录(/redis),这也是实际使用过程中,经常遇到找不到redis的类的原因。
phpredis的命令和参数基本和redis.io中的实际命令对应
下边是代码

<?php

$redis = new \Redis();
//连接(可以查看文档https://github.com/phpredis/phpredis)
$redis->connect("127.0.0.1", 7200);

//string操作(string 类型经常用在缓存json的结构上,因为json序列化完之后就是一个字符串,很容易把它存在string中)
$redis->delete("string1");//确保这个string1是空的
$redis->set("string1", "val1");
$val1 = $redis->get("string1");
var_dump($val1);

$redis->set("string2", "4");
$redis->incr("string2", 2);
$val2 = $redis->get("string2");
var_dump($val2);

//List类型  list类型,经常用它来实现一个队列,队列有个很好的特点"先进先出",经常用队列实现异步行为,比如下单,我们会告诉用户你已经下单成功,后台实际上在队列中插入一个代做事项,等实际的项目来获取代做事项并实际操作,队列在list中,可以左边推入元素(lpush),右边获取元
$redis->lPush("list1", "A");
$redis->lPush("list1", "B");
$redis->lPush("list1", "C");

$val = $redis->rPop("list1");
var_dump($val);

//set类型  set集合,它的集合元素必须是唯一的(list不是),它是无序集合
$redis->sAdd("set1", "A");
$redis->sAdd("set1", "B");
$redis->sAdd("set1", "C");
$redis->sAdd("set1", "C");
//此时set里边实际上有3个元素
$val = $redis->sCard("set1");//得到集合中有几个元素
var_dump($val);

$val1 = $redis->sMember("ste1");//这个函数的作用是将这个集合中的所有元素都返回出来,是以“数组”的形式返回出来的
var_dump($val1);

//hash类型  它存储的类型是key-value的结构,key为string类型,value是一个元素,经常使用hash类型来存储比较复杂的数据结构,比如存储一名司机,他有年龄、姓名、性别等等,这样复杂的结构适合使用hash来存储

//相关操作用法可以查看文档
$redis->hSet("driver1", "name", "xiaoming");//第一个参数为key,第二个参数是hash的key,第三个参数是value
$redis->hSet("driver1", "age", 25);
$redis->hSet("driver1", "gender", 1);
//获取hash的某一个属性
$val = $redis->hGet("driver1", "name");
var_dump($val);
//如果要同时获取多个属性
$vals = $redis->hMGet("drive1",array("name","age"));//返回值是数组,数组中的key是hash属性名,值是value
var_dump($vals);

//sort set类型,这个类型经常用于排行榜,比如要获取一个班级的学生成绩排行,我们会存储每位学生和他的成绩
$redis = zAdd("zset1", 100,"xiaoming");//第一个是key,第二个是分数,第三个是string
$redis = zAdd("zset1", 87,"xiaohong");
$redis = zAdd("zset1", 95,"zhangsan");
$redis = zAdd("zset1", 98,"lisi");

//进行展示
$val = $redis->zRange("zset1", 0, -1);//第一个参数是start,第二个是end(注意是从0开始的,0表示最低分的那个,-1表示将所有的都排出来)
var_dump($val);//低到高

$val = $redis->zRevRange("zset1", 0, -1);//从高到低
var_dump($val);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值