网上商城项目总结(七)使用Redis 缓存 + 单点登陆系统模拟session

Redis:C语言开发的一种开源的高性能键值对数据库,是单线程的,不适合保存内容大的数据,会影响性能。NoSQL数据库,基于特殊的结构,将数据存到内存中的数据库(持久化数据方式RDB,AOF稍后写),性能更优,适合高并发读写,存储,访问需求。具有高扩展性,高可用性。

Redis五种数据类型:

①、字符串类型:最基础,最重要。key-value形式,用作缓存。主要方法,get/set,incr(常用于生成id),desc。

②、hash类型:key-field-value形式,用作缓存。相当于一个key对应一个map。

③、list类型:有顺序,可重复。

④、set类型:元素无顺序,不能重复。

⑤、sortedSet(zset):有顺序,不能重复。

后三种不太常用。

用到的其他一些方法:

设置key的过期时间:expire key second;

查看key的有效期:ttl key;

消除key的过期时间,key持久化:persist key;

其中key为键名。

redis数据的持久化方案:

RDB持久化:快照形式(默认方案),定期把内存中的数据存到磁盘。

AOF持久化:把所有操作的命令(增删改操作)保存到文件中,恢复时把所有命令执行一遍。

也可以设置无持久化状态,相当于一个加强的memcached。

使用Redis 缓存 + 单点登陆系统模拟session:

网上商城中,查询到的商品的信息,缓存至Redis中,下次查询商品时,查看缓存中是否有对应商品信息,有,则直接从缓存中读取,如果没有,则到数据库中读取,这样可以减轻数据库的压力。添加缓存时,设置缓存的过期时间(expire)时间到,redis自动删除数据,避免因为个别的、访问量不高的数据查询导致redis中保存过多数据。

sso单点登陆中,用户登陆后,将用户信息写入缓存,并写入cookie返回给浏览器。当浏览器访问商城中其他需要用户登录后才能操作的模块时(例如订单模块),后端读取用户的cookie信息,到redis缓存中查找相应的用户信息。如果缓存中不存在,返回登陆页面给用户;存在则直接读取缓存中用户的信息。

sso单点登陆的意义:集群环境下,用户访问网站不一定是同一个tomcat处理(前文提到的nginx负载均衡,将用户请求均匀有效地发给后面部署的多个tomcat服务器),每个tomcat有自己的session,如果像传统的保存session的方式保存用户信息,不同的tomcat无法互相读取,用户需要多次登陆,用户体验差。如果采用session复制,又有节点数的限制(tomcat本身压力就不小,如果需要大量处理复制session的工作,一样影响性能,通常session复制,配置tomcat节点最多5个)。sso单点登陆方式解决了以上问题,所以广泛应用于分布式系统架构中。

猜你喜欢

转载自blog.csdn.net/CCCCC_SSSSS/article/details/81304125