前面从朋友手里接到一个任务,就是维护由ecshop二次的微网站,服务器系统ubuntu(阿里云4核8G,20M带宽)
服务器web环境,nginx+php5.5.38+mysql
这网站访问量应该说还是有点大的,我接触到的网站来比较的,目前数据大概在500多万的数据
有几个表的数据量比较大:订单表,用户表,订单日志表,还有一个session表
如何在ecshop上添加redis支持:
cls_redis_session.php
/*------------------------------------------------------ */ //-- 该类用于将SESSION直接写入Memcache /*------------------------------------------------------ */ class cls_redis_session { var $db = NULL; var $max_life_time = 1800; // SESSION 过期时间 var $session_name = ''; var $session_id = ''; var $session_expiry = ''; var $session_md5 = ''; var $session_cookie_path = '/'; var $session_cookie_domain = ''; var $session_cookie_secure = false; var $_ip = ''; var $_time = 0; var $op =array(); function __construct($db1, $session_table, $session_data_table, $session_name = 'ECS_ID', $session_id = '') { $host = '127.0.0.1'; $port =6379; //默认端口为11211 $timeout = false; //过期时间 $time = 3600; //过期时间 $pre ="ECS_"; $user=""; $pwd=""; if(empty($options)) { $options = array ( 'host' =>$host ? $host : '127.0.0.1', 'port' => $port ?$port : 6379, 'timeout' =>$timeout ? $timeout : false, 'persistent' => false, 'expire' => $time, 'length' => 0, 'pre' =>$pre, ); } $this->op= $options; $func = $options['persistent'] ? 'pconnect' : 'connect'; $red = new redis; $conn = $red->$func($options['host'], $options['port']) ; $red->select(1); //if ($user) $this->red->auth($user . ":" . $pwd) ; // $m = new Memcache; // $m->addServer('127.0.0.1', 11211); $this->cls_session($red, $session_name, $session_id); } function cls_session($db1, $session_name = 'ECS_ID', $session_id = '') { $GLOBALS['_SESSION'] = array(); if (!empty($GLOBALS['cookie_path'])) { $this->session_cookie_path = $GLOBALS['cookie_path']; } else { $this->session_cookie_path = '/'; } if (!empty($GLOBALS['cookie_domain'])) { $this->session_cookie_domain = $GLOBALS['cookie_domain']; } else { $this->session_cookie_domain = ''; } if (!empty($GLOBALS['cookie_secure'])) { $this->session_cookie_secure = $GLOBALS['cookie_secure']; } else { $this->session_cookie_secure = false; } $this->session_name = $session_name; $this->db = &$db1; $this->_ip = real_ip(); if ($session_id == '' && !empty($_COOKIE[$this->session_name])) { $this->session_id = $_COOKIE[$this->session_name]; } else { $this->session_id = $session_id; } if ($this->session_id) { $tmp_session_id = substr($this->session_id, 0, 32); if ($this->gen_session_key($tmp_session_id) == substr($this->session_id, 32)) { $this->session_id = $tmp_session_id; } else { $this->session_id = ''; } } $this->_time = time(); if ($this->session_id) { $this->load_session(); } else { $this->gen_session_id(); setcookie($this->session_name, $this->session_id . $this->gen_session_key($this->session_id), 0, $this->session_cookie_path, $this->session_cookie_domain, $this->session_cookie_secure); } register_shutdown_function(array(&$this, 'close_session')); } function gen_session_id() { $this->session_id = md5(uniqid(mt_rand(), true)); return $this->insert_session(); } function gen_session_key($session_id) { static $ip = ''; if ($ip == '') { $ip = substr($this->_ip, 0, strrpos($this->_ip, '.')); } return sprintf('%08x', crc32(!empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] . ROOT_PATH . $ip . $session_id : ROOT_PATH . $ip . $session_id)); } function insert_session() { $value=array('expiry'=>$this->_time, 'ip'=>$this->_ip, 'data'=>'a:0:{}'); $value = (is_object($value) || is_array($value)) ? json_encode($value) : $value; //print_r($value); //exit(); return $this->db->set('SESS_'.$this->session_id,$value , $this->max_life_time); } function load_session() { $session2 = $this->db->get('SESS_'.$this->session_id); if (empty($session2)) { $this->insert_session(); $this->session_expiry = 0; $this->session_md5 = '40cd750bba9870f18aada2478b24840a'; $GLOBALS['_SESSION'] = array(); } else { $session=json_decode($session2,true); if (!empty($session['data']) && $this->_time - $session['expiry'] max_life_time) { $this->session_expiry = $session['expiry']; $this->session_md5 = md5($session['data']); $GLOBALS['_SESSION'] = json_decode($session['data'],true); $GLOBALS['_SESSION']['user_id'] = $session['userid']; $GLOBALS['_SESSION']['admin_id'] = $session['adminid']; $GLOBALS['_SESSION']['user_name'] = $session['user_name']; $GLOBALS['_SESSION']['user_rank'] = $session['user_rank']; $GLOBALS['_SESSION']['discount'] = $session['discount']; $GLOBALS['_SESSION']['email'] = $session['email']; //$GLOBALS['_SESSION'] = json_decode($session->data); //$GLOBALS['_SESSION'] = unserialize(stripslashes($session['data'])); } else { $this->session_expiry = 0; $this->session_md5 = '40cd750bba9870f18aada2478b24840a'; $GLOBALS['_SESSION'] = array(); } } } function update_session() { $adminid = !empty($GLOBALS['_SESSION']['admin_id']) ? intval($GLOBALS['_SESSION']['admin_id']) : 0; $userid = !empty($GLOBALS['_SESSION']['user_id']) ? intval($GLOBALS['_SESSION']['user_id']) : 0; $user_name = !empty($GLOBALS['_SESSION']['user_name']) ? trim($GLOBALS['_SESSION']['user_name']) : 0; $user_rank = !empty($GLOBALS['_SESSION']['user_rank']) ? intval($GLOBALS['_SESSION']['user_rank']) : 0; $discount = !empty($GLOBALS['_SESSION']['discount']) ? round($GLOBALS['_SESSION']['discount'], 2) : 0; $email = !empty($GLOBALS['_SESSION']['email']) ? trim($GLOBALS['_SESSION']['email']) : 0; unset($GLOBALS['_SESSION']['admin_id']); unset($GLOBALS['_SESSION']['user_id']); unset($GLOBALS['_SESSION']['user_name']); unset($GLOBALS['_SESSION']['user_rank']); unset($GLOBALS['_SESSION']['discount']); unset($GLOBALS['_SESSION']['email']); $data = json_encode($GLOBALS['_SESSION']); //$adminid = !empty($GLOBALS['_SESSION']['admin_id']) ? intval($GLOBALS['_SESSION']['admin_id']) : 0; //$userid = !empty($GLOBALS['_SESSION']['user_id']) ? intval($GLOBALS['_SESSION']['user_id']) : 0; //$data = serialize($GLOBALS['_SESSION']); $this->_time = time(); if ($this->session_md5 == md5($data) && $this->_time < $this->session_expiry + 10) { return true; } //$data = addslashes($data); $value=array('expiry'=>$this->_time, 'ip'=>$this->_ip, 'userid'=>$userid, 'adminid'=>$adminid,'user_name'=>$user_name,'user_rank'=>$user_rank,'discount'=>$discount,'email'=>$email, 'data'=>$data); $value1 = (is_object($value) || is_array($value)) ? json_encode($value) : $value; $this->db->set('SESS_'.$this->session_id, $value1, $this->max_life_time); return ; } function close_session() { $this->update_session(); return true; } function delete_spec_admin_session($adminid) { if (!empty($GLOBALS['_SESSION']['admin_id']) && $adminid) { $this->db->flushDB(); } else { return false; } } function destroy_session() { $GLOBALS['_SESSION'] = array(); setcookie($this->session_name, $this->session_id, 1, $this->session_cookie_path, $this->session_cookie_domain, $this->session_cookie_secure); /* ECSHOP 自定义执行部分 */ if (!empty($GLOBALS['ecs'])) { $GLOBALS['db']->query('DELETE FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '$this->session_id'"); } /* ECSHOP 自定义执行部分 */ return $this->db->delete('SESS_'.$this->session_id); } function get_session_id() { return $this->session_id; } function get_users_count() { $all_items = $this->db->DBSIZE(); return $count =$all_items ;//由于有其他key的缓存,因此这只是个接近数值 } }
在init.php里面修改:
/* 添加redis支持 */ if (isset($session_type) && $session_type == "redis") { include(ROOT_PATH . 'include/cls_redis_session.php'); $sess = new cls_redis_session($db, $ecs->table('sessions'), $ecs->table('sessions_data'), 'ECSCP_ID'); }else{ include(ROOT_PATH . 'include/cls_session.php'); $sess = new cls_session($db, $ecs->table('sessions'), $ecs->table('sessions_data')); }
在config里面添加:
//使用redis 2017/9/12 $session_type = "redis";
php添加redis扩展:
http://www.cnblogs.com/zgaspnet/p/3939198.html
phpredis我是下载的2.2.8
添加redis服务端:
1、下载软件包
2、解压安装
#tar –xzvf redis-4.0.1.tar.gz
#cd redis-4.0.1/
#make #这里如果没有安装make编译的话,需要安装apt-get update && apt-get install make
#cd src
#make install PREFIX=/usr/local/redis #注意这里大小写
#cd ..
#mkdir /usr/local/redis/etc/
#cp redis.conf /usr/local/redis/etc/ #复制配置文件
3、启动服务
#cd /usr/local/redis
#./bin/redis-server ./etc/redis.conf #启动服务
#vim ./etc/redis.conf #将daemonize值改为yes redis就在后台运行
#./bin/redis-cli #客户端链接
#./bin/redis-cli shutdown #停止实例
#vim /etc/rc.local
加入开机启动/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf