php 操作redis案例

案例1:本地操作通过php操作redis

windows本地进行应用

首先保证自己的环境已经安装上了redis,新建一个PHP文件

编写 phpinfo();

执行这个文件,看下会不会有redis的服务

如果没有 请在环境中的php的php版本的文件夹下的ext文件夹下放入一个 php_redis.dll文件

可以在我的资源那边自行获取

https://download.csdn.net/download/zhangzeshan/11128805

如果执行之后,往下滑,可以看到 redis的配置信息

 这表示你的环境已经配置好了redis

接下来就是本地开启redis服务

第一个cmd窗口 cd到redis安装的位置 执行命令 redis-server

然后打开第二cmd窗口 同样也是cd到redis安装的位置 执行命令 redis-cli -a redis密码

第一个窗口不要关闭

接下来在php文件中 这个文件用来set数据

$redis = new Redis();
//连接redis服务
$redis->connect('192.168.1.231');//地址
$redis->auth('123456');//密码
//添加string类型的数据
$redis->set('string1','zzs');
//添加单个哈希类型的数据
$redis->hSet('hash1','1','2');
//添加多个哈希类型的数据
$redis->hMSet('hash2',array(
        'id'=>'1',
        'username'=>'zzs',
        'age'=>'23'
));
//添加链表类型的数据
$redis->lPush('list1','zzs');
$redis->lPush('list1','cnc');
$redis->lPush('list1','hzy');
//添加集合类型数据  无序集合
$redis->sadd('set1','zzs','czx','hzy','lys');
//添加有序集合
$redis->zadd('zset1',10,'zzs',2,'asdasdas');

然后执行这个文件

执行之后 回到我们的第二个cmd窗口

输入keys *获取redis服务当前这个数据库的所有键

就能看到我们刚才set的那个键 user888

再来个文件 用来获取数据 get

$redis = new Redis();
$redis->connect('192.168.1.213');
$redis->auth('123456');
var_dump($redis->get('string1'));//获取字符串数据
var_dump($redis->hGetAll('hash2'));//获取hash类型数据
var_dump($redis->lRange('list1',0,-1));//获取list1链表的所有数据  0 -1 表示全部
var_dump($redis->sMembers('set1'));//获取无序集合的数据
var_dump($redis->zRange('zset1',0,-1));//获取有序集合数据
echo '<pre>';

如果不是window本地操作 要连接服务器的话 但是出现连接不成功的问题

极大可能是服务器的防火墙没有关掉

执行命令

service iptables stop


案例2:本地操作通过php操作redis(登陆功能)

首先看下前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77"></script>

    <title>Document</title>
</head>
<body>
    <table width="300">
        <form action="login1111.php" method="POST">
            <tr>
                <td colspan="2" align="center">用户登陆</td>
            </tr>
            <tr>
                <td>用户名</td>
                <td><input type="text" name="name"></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td><input type="submit" value="登陆"></td>
            </tr>
        </form>
    </table>
<script>
    

</script>
</body>
</html>

然后新建一个php文件,这文件主要是操作redis进行判断登陆的密码是否正确

<?php
header('Content-type:text/html;charset=utf8');
$redis = new Redis();
$redis->connect('192.168.0.180');
$redis->auth('123456');

//定义密码
$ps = '123456';
//接收传递的用户名和密码
$name = $_POST['name'];
$password = $_POST['password'];

//判断密码输错了几次
$flag  =$redis->get($name);
if($flag>=5){//如果输错五次
    echo '密码输错五次!';
    exit;
}
//密码的验证
if($password  == $ps){
    //密码正确
    echo '密码正确!';
}else{
    //密码错误  错误次数记录起来
    //键的名称是登陆的用户名
    //incr  将键值+1
    $redis->incr($name);
    //给$name 设置有效期
    $redis->setTimeout($name,1800);
    echo '密码错误!';
}

案例3:通过php操作redis在TP中的使用

以TP3为例

1.在配置文件中配置redis的密码 以TP3为例子 在db.php中 多一个元素(没有密码就无需配置这个)

'REDIS_AUTH' =>'123456'//redis本地密码

2.全局找到Redis.class.php这个文件 增加一段代码

//从配置文件里面取出设置的密码值
if(C('REDIS_AUTH')){
    $this->handler->auth(C('REDIS_AUTH'));
}

3.在home下面找到index控制器

编写两个方法 进行测试 每次都要进行初始化!

public function add(){//添加缓存

    // 初始化
    S(array(
        'type'=>'redis',
        'host'=>'192.168.0.180',
        'port'=>'6379'
    ));

    S('username','zzs',180);
    S('userAge','12',180);
    echo 'ok';
}
public function get(){
    //获取缓存
    // 初始化
    S(array(
        'type'=>'redis',
        'host'=>'192.168.0.180',
        'port'=>'6379'
    ));
    var_dump(S('username'));
    var_dump(S('userAge'));

}
public function del(){//删除缓存
    S(array(
        'type'=>'redis',
        'host'=>'192.168.0.180',
        'port'=>'6379'
    ));
    S('username',null);

}

案例4:redis实现秒杀 (开发思想)

同样以TP3为例子

<?php
/**
 * Created by PhpStorm.
 * User: gaoxi
 * Date: 2017-08-22
 * Time: 14:34
 */
namespace Home\Controller;
use Boris\Config;
use Think\Cache\Driver\Redis;

/**
 * 网站入口控制器
 * Class IndexController
 * @package Home\Controller
 * @author [email protected]
 */
class RedisController extends BaseController
{
    //把库存信息添加到链表中
    public function index(){
        $redis = new \Redis();
        $redis->connect('192.168.0.180');
        $redis->auth('123456');

        //把库存信息添加到链表中
        $goods_number = 100;
        //goods_store添加一百个元素
        for($i=0;$i<100;$i++){
            $redis->lPush('goods_store',1);

        }
        echo 'OK';

    }

    //设置刚才链表的缓存周期
    public function  set(){
        $redis = new \Redis();
        $redis->connect('192.168.0.180');
        $redis->auth('123456');
        //设置刚才链表的缓存周期  30秒
        $redis->setTimeout('goods_store',30);


    }

    //开始抢
    public function run(){
        $redis = new \Redis();
        $redis->connect('192.168.0.180');
        $redis->auth('123456');

        //判断库存是否充足
        $res = $redis->lPop('goods_store');//从链表中的头部取出一个(删除并返回)
        if($res){
            //抢成功
            echo 'success';
//            开始执行跳转到下单的页面

        }else{
            echo 'fail';
        }
    }

}

猜你喜欢

转载自blog.csdn.net/zhangzeshan/article/details/89401803
今日推荐