关于使用缓存或基于Cookie的服务器端会话的疑问
我对网页开发还很陌生,目前正在使用Flask、Sqlalchemy和Postgresql。
根据我的理解,每次新的请求就像程序中的一个新线程。我们会创建一个新的sqlalchemy会话,用来管理数据库操作并返回响应。之后,这个新线程也会关闭,连接会被返回到连接池中。
我登录了一个用户,并获取了所有用户数据,存储在一个用户的ORM对象中。我把它存放在Flask的会话变量里,这个变量是通过cookie实现的。现在,我还想保存一些与用户相关的其他数据,这些数据需要在整个用户会话期间都能使用,而不是仅限于一次请求。我对把所有这些数据存储在cookie中有两个疑问:
1. Unnecessary data travel back and forth.
2. data can be read easily.
我的疑问合理吗?
所以我还有其他问题:
在某种程度上,我是否正确地避免在每次请求中获取一些会话范围内的数据,而不陷入过早优化的陷阱?还是说我应该等到真正需要的时候再担心这个问题,现在只专注于创建一个能工作的应用程序?
除了基于cookie的会话,还有服务器端会话,这可以通过使用redis或memcache来实现。Beaker库在这方面有什么作用?它是一个独立的东西,还是需要与redis或memcache一起使用?
1 个回答
2
大多数浏览器支持的cookie大小最多为4096字节。 (来源)
如果你想保存的数据超过这个大小,那就应该使用服务器端的会话存储,比如Redis或Memcache。其实,把Flask默认的cookie会话接口换成Redis或Memcache的接口是非常简单的。有一个由Armin提供的很棒的Redis示例。如果你更喜欢使用Memcache,那么只需要把示例中的Redis部分换成相应的Memcache方法就可以了。;)