PHP Codeigniter3框架+Redis基本操作

Codeigniter是非常简单好用的PHP框架。Redis是非常流行的分布式缓存服务器框架。这里介绍一下CI框架与Redis相结合,实现数据读取的简单操作。

目录

第一步,开发工具及软件准备:

第二步,CI框架部署、Redis安装部署

第三步,将redis库加入到CI框架,实现从CI框架里调用redis。

第四步,应用示例,读取数据库中的数据并存在redis中


第一步,开发工具及软件准备:

(1)Codeigniter框架、PHPStudy服务器工具

(2)Redis3.0.5 win64位

(3)Sublimetext编辑器、Chrome浏览器

第二步,CI框架部署、Redis安装部署

(1)CI框架安装部署:下载了PHPStudy后安装在磁盘上,同时启动集成的Apache、SQL服务。将下载的CI框架文件夹放置在phpstudy安装目录内的phptutorial里的www文件夹下,并将CI文件夹名称修改为one(可按照自己意愿来重命名),然后在浏览器上输入127.0.0.1/one,出现欢迎页面即表示部署成功。

(2)Redis安装部署: 下载redis压缩版直接解压缩至本地磁盘(如c盘),然后使用windows自带的命令提示符窗口,进入redis解压缩文件夹,找到redis-server可执行文件,然后执行该文件,即可启动redis服务。

第三步,将redis库加入到CI框架,实现从CI框架里调用redis。

(1)从https://github.com/joelcox/codeigniter-redis下载集成包,并将压缩包解压后,将库文件libraries包里的redis.php直接拷贝至CI框架的system文件夹下libraries里。

(2)将配置文件包config里的redis.php拷贝到CI框架的application文件夹里config配置目录里,其内容如下:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Config for the CodeIgniter Redis library
 *
 * @see ../libraries/Redis.php
 */

// Default connection group
$config['redis_default']['host'] = 'localhost';		// 主服务器名称
$config['redis_default']['port'] = '6379';			// 默认端口号 6379
$config['redis_default']['password'] = '';			// Can be left empty when the server does not require AUTH

$config['redis_slave']['host'] = '';             //从服务器名称
$config['redis_slave']['port'] = '6379';         //默认端口号
$config['redis_slave']['password'] = '';

同时将配置文件包里的autoload.php里的语句增加到CI框架application文件夹里config配置目录里autoload.php文件中,如下:

$autoload['libraries'] = array('redis');

(3)开始测试redis是否可以启用。

在CI框架控制器目录下添加一个Redis控制器方法, 代码参考如下:

<?php 

/**
 * 
 */
class Redis extends CI_Controller
{
	function redisTest(){
		$this->load->driver('redis');  //加载redis服务
		$array_mset=array(
			'username'=>'caojianhua', 
			'age'=>18);               //设置数组内容
		$this->redis->mset($array_mset); //以集合方式存入redis
		// 读取redis
		$arr=$this->redis->mget('username'); //读取键值为username的值
		var_dump($arr);   //打印出来
	}
}

此时在浏览器地址栏输入: http://localhost/one/index.php/Redis/redisTest, 浏览器显示如下:

说明CI操作redis的基本读写都可以了。

第四步应用示例,读取数据库中的数据并存在redis中

页面访问时直接读取redis中的数据,如果redis中有,就读取redis中,如果没有,则读数据库中,同时将数据存入redis中。(这里是手动同步方法,redis与mysql之间同步)

(1)在mysql数据中插入用户列表,通过CI框架model层添加一个all方法读取用户数据,读取后在控制器中将数据返回并存到redis中。这里先使用set集合方法保存,使用sadd方法添加键值对,使用smembers方法读取键对应的内容。

model层User_Model代码如下:

<?php 
class User_model extends CI_Model{

    public function all(){
		$this->load->database(); //记载数据库		
		$data=$this->db->get('user')->result_array(); //读取user表中所有数据
		return $data;  //以数组形式返回给控制器
    }
?>

然后在控制器Redis中新添加一个方法,用于获取模型层数据并存入redis中。

   function redis_insertAsSet(){
  		$this->load->driver('redis');  //加载redis驱动
    	$this->load->model('User_model');  //加载数据库
    	$this->redis->flushdb();    	//清除redis现有数据
    	$userAll=$this->User_model->all();    //获取user_model中all方法返回结果	
    	var_dump($userAll);    	   	//打印用户列表数组
    	foreach ($userAll as $key => $value) {    		
    		$this->redis->sadd('username',$value['username']);  //将username存入redis
    	 	$this->redis->sadd('userpwd',$value['userpwd']);   //将userpwd存入redis
    	 	$this->redis->sadd('reg_time',$value['reg_time']);  //将reg_time存入redis
    	}
    	echo '<hr>';    	//区分水平线
    	var_dump($this->redis->smembers('reg_time')); //打印redis中所有reg_time列表
         
   }

浏览器地址栏输入localhost/index.php/one/redis/redis_insertAsSet,回车后获得结果如下:

(2)同样的数据,使用hash表操作式存入redis,然后读取,代码参考如下:

    function redis_insertAsHash(){
  		$this->load->driver('redis');
    	$this->load->model('User_model');
    	$this->redis->flushdb();    	
    	$userAll=$this->User_model->all();    	
    	var_dump($userAll);  
    	$uid=0;  	   	
    	foreach ($userAll as $key => $value) {    		
    		$this->redis->hmset("user".$uid,array("username"=>$value['username'],"userpwd"=>$value['userpwd'],"t_time"=>$value['reg_time'])); //以hash表方式存储到redis中
    		$uid++;
    	}
    	echo '<hr>';    	
    	var_dump($this->redis->hgetall('user1')); //获取user1的所有信息
         
   }

浏览器地址栏输入localhost/index.php/one/redis/redis_insertAsHash,回车后获得结果如下:

(3)用户登陆实现:在控制器Redis新增一个index方法,加载index.php视图文件,在视图文件中采用表单布局,如下效果:

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
     <style type="text/css">
     	fieldset{height: 150px;width: 400px;padding-top: 25px;background: #ffd;font-size: 14px;}
     	input{margin: 5px;}
     </style>
</head>
<body>
<center> <caption>redis用户登陆测试</caption>
  <fieldset>	
	 <form action="<?php echo site_url('Redis/login') ?>" method="post" >
		 用户姓名<input type="text" name="username"><br>
		 用户密码<input type="password" name="userpwd" ><br><br>
		 <input type="submit" value="登陆">
	</form>
</fieldset>  
</center>
</body>
</html>

当在表单两个输入框内输入用户名和密码后点击登陆,将会跳转至redis控制器下的login方法进行处理。处理时调用redis服务器而不是直接去查询数据库,先查询redis服务器中是否存在该用户名,其密码与表单输入的密码是否一致,如果一致就允许登陆,否则就跳转至注册页面或者提示是否输入错误,如下代码:

	function login(){   //控制器里的登陆处理方法
        $this->load->driver('redis');        
    	$username=$this->input->post('username');    	//获取表单输入的用户名
    	$userpwd=$this->input->post('userpwd');        //获取表单输入的用户密码
    	$user_exists=$this->redis->hgetall('user:'.$username);  //读取redis里所有用户姓名数组
        if(in_array($username, $user_exists)){     //判断输入的用户名是否已经存在
        	$db_password=$this->redis->hget('user:'.$username,'userpwd'); //如果存在,查询redis数据库里当前用户的密码
        	if($userpwd==$db_password){       //如果输入密码与数据库里密码匹配
        		$session['username']=$username;  //将当前用户名保存到session里
        		echo 'welcome to my site!';   
        	}else{
        		echo '密码有误';
        	}
        }else{
        	echo '用户名不存在';
        	
        } 
	}

此时控制器里的redis_insertAsHash方法需要修改一下redis存储方式:

    function redis_insertAsHash(){
  		$this->load->driver('redis');
    	$this->load->model('User_model');
    	$this->redis->flushdb();    	
    	$userAll=$this->User_model->all(); 
    	foreach ($userAll as $key => $value) {    		
    		$this->redis->hmset("user:".$value['username'],array("username"=>$value['username'],"userpwd"=>$value['userpwd'],"t_time"=>$value['reg_time']));    		
    	}
   }

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值