道者编程

php修改session到memcache和redis

PHP默认session保存在系统文件中,如果linux一般在/tmp下,但在分布式系统中,session跨域就会有问题,用memcache保存session是个好方法,不仅解决了跨域问题,而且速度也快。

一:memcache

1:修改php.ini,全局设置

session.save_handler = memcache 
session.save_path = "tcp://127.0.0.1:11211" #分布式肯定要设置一个所有机器都能访问的地址

把/tmp注释掉加入这两句。

2:程序中设置:

ini_set("session.save_handler", "memcache"); 
ini_set("session.save_path", "tcp://127.0.0.1:11211");
第一种方法是全局设置,设置好后,服务器所有的session都将保存在memcache里面,设置后需要重启php

3:查看

(1):进入memcache

telnet 127.0.0.1 11211

memcache没有直接查看所有的key,这个和redis不一样,可能当初设计就是缓存服务器,没必要查这个,不过还是可以查询,只不过很麻烦。

(2)列出所有item

stats items

这是死马意思?

官方解释:命令用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)。我们取items:1的这个说明下

STAT items:1:number 14 #表示在items id为1的地址里面保存了14个key
STAT items:1:age 3290
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 4
STAT items:1:expired_unfetched 3
STAT items:1:evicted_unfetched 0
接着查items:1

stats cachedump 1 0 #0表示查询itemsid为1的地址中的所有的key
 

然后根据get查询,我查询第一个key foo

get foo

foo的值是bar,查询成功

这样太麻烦,浏览器F12,获取一下sessionid,然后到memcache get一下,看是否在memcache里面。


二:redis

配置修改和memcache类似

1:全局修改php.ini

session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?auth=123"#我这里密码是123,如果没有密码问号这一段不需要

2:程序中设置

ini_set("session.save_handler", "redis");
ini_set("session.save_path", "tcp://127.0.0.1:6379?auth=123");#我这里密码是123,如果没有密码问号这一段不需要
3:查看

我们在php程序中设置一个:$_SESSION['name']='lijie';

验证一下在redis中是否存在,redis 用 session_id 作为 key 并且是以 string 的形式存储。先在PHP输出一下当前的session_id,也可以浏览器F12查看该值。

echo 'PHPREDIS_SESSION:' . session_id() 

这里输出为:PHPREDIS_SESSION:26s27g5lftkl04hqv9srmrqih5

把这个值在redis中查找一下执行:

get PHPREDIS_SESSION:26s27g5lftkl04hqv9srmrqih5
数据已经在redis中了。


最新评论:
2楼 四川省 电信 发表于 2018-10-26 10:51:33
4568
共有 1 条记录  首页 上一页 下一页 尾页 1
我要评论:

看不清楚