因为我的表中,余额是用户表的其中一个字段,我之前的做法是用户登录的时候取出来放session里,然后主动操作的时候既更新数据库中的余额,也更新session里的。
但是被动增加的时候就很麻烦了,那是后端的操作,没法更新到对应的余额被增加的用户的session里。
第一次遇到这种情况的处理,求问大家有什么好方案?
但是被动增加的时候就很麻烦了,那是后端的操作,没法更新到对应的余额被增加的用户的session里。
第一次遇到这种情况的处理,求问大家有什么好方案?
2
Sunyanzi Feb 27, 2013 我不太明白 LZ 的意思 ...
在我看来这不过就是一个触发器而已 ... 任何主动操作的步骤是从 session 获取用户 id 根据 id 执行修改 credit ... 被动操作的话 ... 比如被感谢 ... 根据帖子找到发帖人 id 根据 id 执行修改 credit ... 帖子被回复同理 ... 根据回帖找到楼主 id 根据 id 执行修改 credit ... 这种一目了然的问题你有什么不明白的 ..? |
4
qiayue OP PRO @Sunyanzi 被动操作的,更新到数据库,我知道。
我的疑问是session里的余额如何同步更新? 举个栗子,我现在被感谢了,数据库里我的铜币增加了10,假如页面上的余额每次页面刷新都从数据库里边取,那没有任何问题。 我是想能不能减少查询次数,把余额存在session里,这样我多次刷新页面,就不需要去多次查询数据库了。 |
5
iloveyou Feb 27, 2013 session放余额干嘛 又不是购物车
|
6
sohoer Feb 27, 2013 可以用一个余额缓存,而不是存入session,
|
7
iloveyou Feb 27, 2013 用memcache redis
|
8
qiayue OP PRO |
10
rqrq Feb 27, 2013 每次都读数据库也不会怎样,性能损耗相当小,数据库没有想象中那么脆弱。
当然也可以把用户信息存到memcache或者nosql数据库,用userid对应。 为什么要用session啊?下面的问题解决起来都得不偿失: 发帖/回帖提交的时候session已过期; 想要立即禁止某个在线用户的账号; |
11
Cadina Feb 27, 2013 放session里是否有利取决于你的session存储的设计。
不管是否缓存在session里,余额信息是必须用数据库做持久化的,session只是一个缓存。 |
12
qiayue OP PRO 感谢以上各位,我知道了,不纠结了,每次直接取是最方便的。
|
13
sohoer Feb 27, 2013
你用什么开发,java使用一个静态变量做数据缓存很简单的
|
14
mkeith Feb 27, 2013
其实楼主纠结的是 缓存的更新问题
|
15
sohoer Feb 27, 2013
比如用一个全局的静态MAP<userid, money>,不管是主动还是被动修改都去更新MAP的值(如果存在)。
查看余额的时候从MAP中读,如果存在返回,不存在从数据库读。 |
16
chuangbo Feb 27, 2013
function 更新余额()
....更新数据库 ....将当前值写入缓存 function 读取余额() ....如果有缓存: .......返回缓存 ....如果没有缓存: .......读取数据库,并写入缓存 .......返回缓存 |
17
treo Feb 27, 2013
查看帖子列表和查看帖子的sql查询耗时比查询余额的耗时多得多吧
|