案例1:本地操作通过php操作redis
windows本地进行应用
首先保证自己的环境已经安装上了redis,新建一个PHP文件
编写 phpinfo();
执行这个文件,看下会不会有redis的服务
如果没有 请在环境中的php的php版本的文件夹下的ext文件夹下放入一个 php_redis.dll文件
可以在我的资源那边自行获取
如果执行之后,往下滑,可以看到 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 22691513@qq.com
*/
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';
}
}
}