开发者社区> 问答> 正文

memcache与redis替代session如何?是不是有redis就不需要memcache了?

看了知乎与segmentfault的架构,都是用的是redis,但是这个session存储也用的是redis吗?

展开
收起
李博 bluemind 2019-04-09 13:02:04 1782 0
1 条回答
写回答
取消 提交回答
  • 云栖社区Java、Redis、MongoDB运营小编,有意合作请联系钉钉:15810436147

    1)首先redis和memcache(后面简写mc)取舍问题。
    在很多mc的应用场景下,都可以使用redis也是可行的解决方案。当key比较大的时候,mc有更好的性能。当让mc存在key的大小限制(默认参数最大允许存1MB的字符串,-I参数的默认值)。
    而redis在key较大的情况,读写性能非常低效。而选择mc有更好的性能和吞吐量。
    下面是生产上的测试,200并发的情况系,单个key为500kB的情况下。

     redis-benchmark -d 500000 -t get,set -n 1000 -c  200 -q 
     SET: 306.84 requests per second
     GET: 1449.28 requests per second

    redis的优势主要体现在两方面:
    1)丰富的数组结构,无疑提高了开发效率。list(queue)、set/zset、hashmap、HyperLogLog非常好用。
    redis is a data structure server。构建简单的消息队列,set去重操作,hashmap存放简单的关系型数据,HyperLogLog做唯一计数,等等。
    2)redis支持主从复制,对与构建支持auto-failover的ha方案提供了必要的条件--multi replicas。比如简单的keepalive + vip的方式。
    3)另外,twemproxy,redis sentinel、redis-cluster的出现,可以让运维或者DBA构建大规模的分布式缓存系统。(我本人是DBA)
    具体的对比,查看http://segmentfault.net/q/1010000002588088?_ea=147671

    2)关于session存储。
    session是web服务器端存放的用户行为数据,存储方式有很多中。比如nfs共享文件系统,tomcat集群提供了共享session存储。其他的用db(RDBMS)存储的也有。
    nosql出现之后,常见的选择有redis、mc、mongodb。redis、mc的php直接提供调用模块(函数),都很方便使用。
    虽然很多人说,session存储crash了,影响不大,大不了用户重新登录。但是我觉得session数据千万不能丢失。
    1)首先,session数据丢失,用户需要重新登录,用户的体验非常差。
    2)对一些购物网站,session的数据更为重要。session数据对于追踪用户的行为非常重要,比如做推荐系统、网站防刷系统(是否是机器人在爬去数据)。
    因而我个人比较认同mc开发的观点,不要使用mc作为session存储。而选择redis,可以做数据复制和ha方案的。

    2019-07-17 23:32:57
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
ApsaraDB for Redis——与创客同行 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载