OCS与数据库结合使用示例
更新时间:
缓存与数据库相结合使用,是常见的一种应用搭配场景。本文以简单的Java例子,介绍OCS搭配MySQL数据库使用。
在程序中添加MySQL数据库的连接信息:
// JDBC driver name and database URL
static final String JDBC_DRIVER = “com.mysql.jdbc.Driver”;
static final String DB_URL = “jdbc:mysql://xxxxxxx.mysql.rds.aliyuncs.com/testdb”; //MySQL数据库URL
// Database用户名及密码
static final String DB_USER = “xxxxxx”;
static final String DB_PASS = “xxxxxx”;
设想这样一个场景:我们需要从数据库的tableone表中查找区域不属于北京的记录总数,用SQL表示就是:
SELECT count() FROM testdb.tableone where region != ‘beijing';
假定这个表中的数据如下,则这条SQL查询返回的结果就是7:
ID | NAME | REGION |
---|---|---|
1 | Tanghan | beijing |
2 | Jack | hangzhou |
3 | Michelle | shenzhen |
4 | BossChen | shanghai |
5 | MengTang | qingdao |
6 | QianQian | shanghai |
7 | XiaoXiong | shanghai |
8 | intdos | beijing |
9 | Robinshi | beijing |
10 | iydong | hangzhou |
如果这个查询被调用到的频率很高,多个用户反复不断的在数据库中查这个数据,我们就可以把这个查询结果放到OCS缓存中去。
看下面的代码片段,我们用for循环模拟用户连续20次在数据库中查询上述SQL语句:
for (int i = 1; i <= 20; i++) {
String sql = “SELECT count() FROM testdb.tableone where region != ‘beijing’”;
String key =”non-beijing”; //给SQL语句自定义一个key
//在OCS缓存里按key查找
String value = (String) cache.get(key);
if (value == null) {
// 在OCS缓存里没有命中
// step 1:从My SQL数据库中查询
//Load MySQL Driver
Class.forName(JDBC_DRIVER);
con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
ps = con.prepareStatement(sql);
ResultSet result = ps.executeQuery(sql);
result.next();
value=result.getString(1);
System.out.println(“从MySQL中查询数据. Key= “+key+” Value=”+value);
// step 2:把数据库返回的数据作为value存放到OCS缓存中去
cache.set(key, EXPIRE_TIME, value);
} else {
// 在OCS缓存里命中
System.out.println(“从OCS中读取数据. Key= “+key+” Value=”+value);
}
}// end of for
在这段代码中我们可以看到,我们给这条SQL语句标记了一个key,当有用户要执行这条SQL的时候,我们首先按照key在OCS缓存中查找:如果没有对应的缓存数据,则连接MySQL数据库执行SQL查询,把结果返回给用户,并把这个查询结果存到OCS缓存中去;如果OCS中已经有了对应的缓存数据,则直接把缓存数据返回给用户。 运行结果如下:
从MySQL中查询数据. Key= non-beijing, Value=7
从OCS中读取数据. Key= non-beijing, Value=7
从OCS中读取数据. Key= non-beijing, Value=7
从OCS中读取数据. Key= non-beijing, Value=7
…… ……
从结果可以看出,程序第1次是从MySQL数据库当中查询数据,后面的19次都是从OCS缓存中获取key对应的value直接返回。也就是说,OCS降低了程序去连接MySQL数据库执行SQL查询的次数,减轻了对数据库的负载压力。用户对热点数据访问的频率越高,OCS的这种优势就越明显。
文档内容是否对您有帮助?