利用redis存储session,解决登录同步问题

原创 2015年11月20日 14:51:52

一、php session存储方式

在php中,存储session可以使用files user memcached redis,对于小型单一网站可以直接使用files的方式存储session。使用缓存数据库存储session的好处是较之文件存储方式,在大用户量的情况下速度更快、性能更优。而且如果做分布式系统的话,使用数据库存储是很好的方式。
所以,如果使用数据库存储session,memecached和redis到底那种更好。

二、redis和memcached的比较

1、redis不仅仅支持简单的k/v类型的数据,同时还提供list、set、zset、hash等数据结构的存储;
2、redis支持数据的备份,即master-slave模式的数据备份;
3、redis支持数据的持久化,可以将内存中的数据保存到磁盘中,重启的时候可以再次加载进行使用;
redis和memcached都是高性能的分布式缓存服务器,通过上述比较,考虑到如果重启服务器,memcached中的数据都会丢失,会影响用户的体验,所以使用redis存储session是比较好的方案。

三、redis存储session的php实现

在我的上篇博客中,已经介绍了怎么安装redis服务器及phpredis扩展,具体请参考:http://blog.csdn.net/turtleo/article/details/49934497

<?php

ini_set('session.gc_maxlifetime', 3600);
ini_set('session.save_handler', "redis");
ini_set("session.save_path", "tcp://127.0.0.1:6379");
session_start();
$_SESSION['uid'] = "2";
$_SESSION['username'] = "turtle";

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$user = $redis->get('PHPREDIS_SESSION:'.session_id()).'</br>';
echo $user;
?>

如果在配置文件中/etc/redis/6379.conf中开启了requirepass,这使用如下代码

ini_set('session.gc_maxlifetime', 3600);
ini_set('session.save_handler', "redis");
ini_set("session.save_path", "tcp://127.0.0.1:6379?auth=password");
session_start();
$_SESSION['uid'] = "2";
$_SESSION['username'] = "turtle";

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('turtletl.com');
$user =  $redis->get('PHPREDIS_SESSION:'.session_id()).'</br>';
echo $user;
?>

可以进行如下配置开启requirepass:

vim /etc/redis/6379.conf

具体配置文件依情况而定

requirepass 密码

重启redis服务器。

版权声明:本文为博主原创文章,未经博主允许不得转载。

用Redis实现Session功能,实现单点登录

0.什么是Redis Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API ---维基百科 1.与其他...
  • u013851082
  • u013851082
  • 2016年12月19日 09:41
  • 12198

Session存储到Redis

Session存储到Redis 当然要写先安装php的扩展,可参考这篇文章:Redis及PHP扩展安装 修改php.ini的设置 session.save_handler = redis ses...
  • big1980
  • big1980
  • 2014年03月21日 21:40
  • 5525

redis运行后的一些警告

Warning: no config file specified, using the default config. In order to specify a config file use ...
  • chenggong2dm
  • chenggong2dm
  • 2010年12月28日 11:01
  • 34030

细说ini_set()

注意啦,这里是PHP的世界,请注意前提条件,你说这个不重要,什么你说这是废话?罚你通读PHP在线手册3天...             印象中在脚本中修改配置,顺手拈来:           ini_...
  • littlebo01
  • littlebo01
  • 2015年04月28日 13:45
  • 3070

利用redis缓存解决高并发下后端重复请求措施

最近在进行压力测试的时候发现在高并发下,有些接口很可能因为重复请求导致对数据库操作出来的数据不是你想要的那个样子。比如,用户签到,你只想让用户一天签到一次,为了防止签到多次,你对于每次强求,都去查询数...
  • js_sky
  • js_sky
  • 2015年10月21日 14:29
  • 6733

web集群中常用的session同步解决方案及对比

随着网站的功能越来越多,用户量越来越庞大,单节点模式已经严重不能支撑整个系统的正常运作,轻则用户页面访问时间越来越慢,重则就会导致整个系统瘫痪。这时候 就需要优化或调整目前的架构,大部分人就会采用各种...
  • Mr_Smile2014
  • Mr_Smile2014
  • 2015年12月07日 22:17
  • 4346

redis 安装及安装遇到的问题解决

公司项目需要解决大并发问题,需采用nosql 数据库。前一个项目采用memcache做为提升系统的并发分布式缓存,memcache 采用简单 key-value 的方式,存储在内存中,当然数据过大肯定...
  • jy0902
  • jy0902
  • 2014年02月15日 18:37
  • 31874

php.ini save_handler 修改不启作用 解决办法

php5.3.3以前php-fpm还没有被php收录,配置php基本都在php.ini里面,php5.3.3及以后,除了在php.ini配置以外,还可以在php-fpm.conf里面配置。 ...
  • a454211787
  • a454211787
  • 2014年06月25日 16:06
  • 492

分布式系统里session同步的那些事儿

几周前,有个盆友问老王,说现在有多台服务器,怎么样来解决这些服务器间的session同步问题?老王一下就来精神了,因为在n年以前,老王还在学校和几个同学一起所谓创业的时候,也遇到了类似的问题。当时查了...
  • xyw591238
  • xyw591238
  • 2016年06月12日 10:24
  • 6979

集群session一致性和同步问题

一. 何为session 用户使用网站的服务,基本上需要浏览器和web服务器进行多次交互,web服务器如何知道哪些请求是来自哪个会话的? 具体方式为:在会话开始时,分配一个唯一的会话标识(...
  • kk936321732
  • kk936321732
  • 2015年05月04日 18:06
  • 3103
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用redis存储session,解决登录同步问题
举报原因:
原因补充:

(最多只允许输入30个字)