Java内存存储减少数据库负载安全?
如果我有一个MySQL表,该表不经常更改(每月一次),其中包含web服务的活动用户帐户等信息。执行以下操作有多安全:Java内存存储减少数据库负载安全?,java,mysql,Java,Mysql,如果我有一个MySQL表,该表不经常更改(每月一次),其中包含web服务的活动用户帐户等信息。执行以下操作有多安全: public AccountDao { List<Account> accounts; /*fields*/ public AccountDao() { refreshAccounts(); } public void refreshAccounts() { this.accounts = /*ca
public AccountDao
{
List<Account> accounts;
/*fields*/
public AccountDao()
{
refreshAccounts();
}
public void refreshAccounts()
{
this.accounts = /*call to database to get list of accounts*/
}
public boolean isActiveAccount(String accountId)
{
//logic involving in memory list object above
}
}
公共帐户
{
列出账目;
/*田地*/
公共帐户()
{
刷新帐户();
}
公共帐户()
{
this.accounts=/*调用数据库以获取帐户列表*/
}
公共布尔值isActiveAccount(字符串accountId)
{
//上面的内存列表对象中涉及的逻辑
}
}
我之所以这样做,是因为我必须检查每个请求的用户是否有活动帐户,以允许访问web服务。这将允许我避免在每次请求时对数据库层进行一次SQL调用(目前的重点是)。我的问题是在生产中存储这样的数据有多安全
顺便说一下,每当通过API调用添加新用户帐户时,我都会刷新帐户列表。如上所述,这种情况大约每月发生一到两次。如果您有某种触发器在相应的数据库表更改时更新内存中的对象,那么它应该是安全的 如果没有触发器,它将成为一个正确性的问题,并可能成为一个政策问题。如果基础结构的不同部分具有不同的数据库内存版本,会发生什么情况?
例如,添加或删除用户与服务反映的更改之间的可接受时间间隔是多长?如果在相应的数据库表更改时,您有某种触发器来更新内存中的对象,那么它应该是安全的 如果没有触发器,它将成为一个正确性的问题,并可能成为一个政策问题。如果基础结构的不同部分具有不同的数据库内存版本,会发生什么情况? 添加或删除用户与服务反映的更改之间的间隔时间可以接受多久?请查看。如果不是memcached,那么您的库可能已经支持它了。看看。如果不是memcached,那么您的库可能已经支持它了
编辑:否,web容器不同步线程。并发请求将由并发线程提供服务,如果这些线程碰巧读写相同的数据,则可能导致数据竞争。例如,一个线程可以在使用新信息更新帐户列表时读取该列表,从而看到一个不完整的列表 这很难回答。这是主观的。我们在应用程序中做了很多修改,你是对的;它可以大大提高性能。但是它会咬你吗?当然你关心什么样的安全?线程安全?证书的保密性?证书的货币。。。?我担心数据被破坏。这项服务通常一次运行几个月没有问题。什么数据?账户列表?@meriton我想一切都是安全的,但也许不是..这很难回答。这是主观的。我们在应用程序中做了很多修改,你是对的;它可以大大提高性能。但是它会咬你吗?当然你关心什么样的安全?线程安全?证书的保密性?证书的货币。。。?我担心数据被破坏。这项服务通常一次运行几个月没有问题。什么数据?帐户列表?@meriton我认为一切都是安全的线程,但也许不是..我知道缓存,但我认为只处理一两个表和几列数据有点沉重。它不像内存中的对象