使用list代替数据库例子:
public class MainTest {
@Test
public void test14() {
//缓存一个集合通过memcached
try {
MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("192.168.1.102",11211));
System.out.println("Connection Successful");
List<String> emps = new ArrayList<String>();
emps.add("Tom");
emps.add("Jack");
emps.add("SCOTT");
emps.add("SMITH");
mcc.set("emps", 900, emps);
System.out.println(mcc.get("emps"));
mcc.shutdown();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void test15() {
//获取缓存memcached
try {
MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("192.168.1.102",11211));
System.out.println("Connection Successful");
List<String> emps = (List<String>) mcc.get("emps");
for(String emp : emps) {
System.out.println(emp);
}
mcc.shutdown();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
上述程序:直接通过缓存去取值
优点:提高工作效率
与数据库连接
通过JDBC查询出对应的结果,将结果缓存到Memcached当中,来进行查找,
查找结果集,而不是每一次都和数据库连接,大大提升数据库的工作效率.
实例:
1.新建类Emp(如果想把对象写入到缓存中,对象得实现序列化)
public class Emp implements Serializable {
private static final long serialVersionUID = -2984725466734507448L;
private int empno;
private String ename;
private String job;
public Emp() {
}
public Emp(int empno, String ename, String job) {
super();
this.empno = empno;
this.ename = ename;
this.job = job;
}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
}
2.新建读取测试类ReadTest.java
public class ReadTest {
@Test
public void test1() {
//读取数据库中emp表的数据 然后将数据封装到集合中 最后将集合存储到缓存里
try {
//动态加载驱动
Class.forName("com.mysql.jdbc.Driver");
//创建数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hp_memcached", "root", "zzj6660534");
//执行sql语句的对象
Statement stmt = conn.createStatement();
//执行SQL语句,将结果赋值给结果集
ResultSet rs = stmt.executeQuery("select empno,ename,job from emp");
List<Emp> emps = new ArrayList<Emp>();
while (rs.next()) {
//取得数据
System.out.println(rs.getInt("empno")+" "+rs.getString("ename")+" "+rs.getString("job"));
//结果集的数据封装到对象里,直接在对象里操作
Emp emp = new Emp(rs.getInt("empno"),rs.getString("ename"),rs.getString("job"));
//将数据放到集合里
emps.add(emp);
}
System.out.println(emps.size());
//定义Memcached对象
MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("192.168.1.102",11211));
Future fo = mcc.set("emps", 900, emps);
System.out.println("缓存状态:"+fo.get());
mcc.shutdown();
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
//遍历结果集
public void test2() throws Exception{
//获取缓存数据(服务器缓存不需要访问数据库,效率高)
MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("192.168.1.102",11211));
List<Emp> emps = (List<Emp>) mcc.get("emps");
//System.out.println(emps.size());
for(Emp emp : emps) {
System.out.println(emp.getEmpno()+" "+emp.getEname()+" "+emp.getJob());
}
mcc.shutdown();
}
}