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中了。