扫码关注官方订阅号
看了知乎与segmentfault的架构,都是用的是redis,但是这个session存储也用的是redis吗?
走同样的路,发现不同的人生
楼主应该说的是替代默认的file的session。 一般来说用memcache就好了, 除非项目其他地方用了redis,那就也存redis吧,
有了redis就不需要memcache,有了memcache就不需要redis。 不是一定不能,而是没必要搞那么复杂。
1.SESSION是一种储存机制,而不是软件 2.虽然redis和memcache有很多地方都一样。但是储存临时性数据,还是memcache比较合适。redis主要是数据在内存中,定时或者定量写入,因此读取和写入都很快 3.SESSION既可以储存在memcache中,也可以储存在redis中。但是考虑到SESSION的临时性,个人认为更适合储存在memcache中
使用Redis实现Session共享,最重要的一个原因在于,Redis支持Hash结构(Session本质上就是服务器维护的一个哈希表)。
假设一个场景来说明,现在要在Session中要存入用户ID、用户头像两个字段信息,如果使用Memcached存储,有两种方式来存储:
将用户ID、用户头像分别使用两个Key来存储,key1 = #userId、key2 = #avatar
使用一个Map结构将用户ID、用户头像两个字段包装起来,如此可以将用户ID及头像信息视作一个对象来存储,key = {userId : #userId ,avatar : #avatar}
现有一个业务,需要从Session中取出#userId信息,第一种存储方式,可以直接使用key1找到#userId,第二种则需要使用key将包装过的用户信息整体取出,再取出其中的#userId信息,由此不难看出,第二种方式比较浪费网络资源。第一种方式看似可用,其实也是一个坑~现有另一个业务,需要从Session中同时取出#userId和#avatar两个字段信息,第一种方式则需要分别使用key1和key2进行两次网络交互才能取得所需信息(字段数量越多,网络开销也越大),反而使用第二种式,更加合算。由此可见使用memcached来实现Session共享是不合适的。同样的业务场景,使用Redis,可以将用户信息以Hash结构存储,同样将用户信息作为一个整体存入:
# 将用户信息作为一个整体写入Redis HMSET key userId #userId avatar #avatar name #name # 一次取出全部字段信息 HGETALL key # 只取出其中一个或多个字段 HGET key name HMGET key name avatar ...
由示例可以看出无论是取出部分信息还是全部信息,网络开销都只需要一次,写入也是同样的道理,仅此一点,也能证明Redis比Memcached更适合用来实现Session共享。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
楼主应该说的是替代默认的file的session。
一般来说用memcache就好了,
除非项目其他地方用了redis,那就也存redis吧,
有了redis就不需要memcache,有了memcache就不需要redis。
不是一定不能,而是没必要搞那么复杂。
1.SESSION是一种储存机制,而不是软件
2.虽然redis和memcache有很多地方都一样。但是储存临时性数据,还是memcache比较合适。redis主要是数据在内存中,定时或者定量写入,因此读取和写入都很快
3.SESSION既可以储存在memcache中,也可以储存在redis中。但是考虑到SESSION的临时性,个人认为更适合储存在memcache中
使用Redis实现Session共享,最重要的一个原因在于,Redis支持Hash结构(Session本质上就是服务器维护的一个哈希表)。
假设一个场景来说明,现在要在Session中要存入用户ID、用户头像两个字段信息,如果使用Memcached存储,有两种方式来存储:
将用户ID、用户头像分别使用两个Key来存储,key1 = #userId、key2 = #avatar
使用一个Map结构将用户ID、用户头像两个字段包装起来,如此可以将用户ID及头像信息视作一个对象来存储,key = {userId : #userId ,avatar : #avatar}
现有一个业务,需要从Session中取出#userId信息,第一种存储方式,可以直接使用key1找到#userId,第二种则需要使用key将包装过的用户信息整体取出,再取出其中的#userId信息,由此不难看出,第二种方式比较浪费网络资源。第一种方式看似可用,其实也是一个坑~
现有另一个业务,需要从Session中同时取出#userId和#avatar两个字段信息,第一种方式则需要分别使用key1和key2进行两次网络交互才能取得所需信息(字段数量越多,网络开销也越大),反而使用第二种式,更加合算。由此可见使用memcached来实现Session共享是不合适的。
同样的业务场景,使用Redis,可以将用户信息以Hash结构存储,同样将用户信息作为一个整体存入:
由示例可以看出无论是取出部分信息还是全部信息,网络开销都只需要一次,写入也是同样的道理,仅此一点,也能证明Redis比Memcached更适合用来实现Session共享。