在項目中常常需要后臺程序的持久層查詢數(shù)據庫來獲取數(shù)據,然后將數(shù)據交給服務層、控制層,最后才交給視圖層。如果數(shù)據訪問緩慢,就會影響程序的運行。
為了加快程序的運行,可以將數(shù)據放入緩存中,包括數(shù)據緩存和頁面緩存。
所謂緩存,就是將程序或系統(tǒng)經常要調用的對象存在內存中,一遍其使用時可以快速調用,不必再去創(chuàng)建新的重復的實例。這樣做可以減少系統(tǒng)開銷,提高系統(tǒng)效率。
其中頁面緩存主要是oscache,可以整頁或者指定網頁某一部分緩存,同時指定他的過期時間,這樣在此時間段里面訪問的數(shù)據都是一樣的 。
數(shù)據緩存則比較多,有著名的ehcache,redis,memcached等。
本文主要簡單的使用Java代碼進行redis緩存,即在查詢的時候先在service層從redis緩存中獲取數(shù)據。如果不存在,則再經過dao層從數(shù)據庫中獲取,最后將查詢到的數(shù)據緩存到redis中;如果存在,直接從redis緩存中讀取,并交給controller層。
xml配置:
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.maxTotal}"></property> <property name="maxIdle" value="${redis.maxIdle}"></property> <property name="testOnBorrow" value="${redis.testOnBorrow}"></property> <property name="maxWaitMillis" value="${redis.maxWaitMillis}"></property> </bean> <!-- jedis客戶端單機版 --> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg> <constructor-arg name="host" value="${redis.hostName}"></constructor-arg> <constructor-arg name="port" value="${redis.port}"></constructor-arg> </bean> <!-- jedis集群版配置 --> <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> <constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg> <constructor-arg name="nodes"> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="127.0.0.1"></constructor-arg> <constructor-arg name="port" value="7001"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="127.0.0.1"></constructor-arg> <constructor-arg name="port" value="7002"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="127.0.0.1"></constructor-arg> <constructor-arg name="port" value="7003"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="127.0.0.1"></constructor-arg> <constructor-arg name="port" value="7004"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="127.0.0.1"></constructor-arg> <constructor-arg name="port" value="7005"></constructor-arg> </bean> </set> </constructor-arg> </bean> [java] view plain copyjava調用 //service層查詢時代碼 @Autowired private JedisClient jedisClient; @Override public List<User> list() { // TODO Auto-generated method stub try { String json = jedisClient.hget("user", "list"); if (StringUtils.isNotBlank(json)) { List<User> users = JsonUtils.jsonToList(json, User.class); return users; } } catch (Exception e) { e.printStackTrace(); } //使用持久層查詢數(shù)據庫 List<User> list = userMapper.list(); try { jedisClient.hset("user", "list", JsonUtils.objectToJson(list)); } catch (Exception e) { e.printStackTrace(); } return list; }
總結
以上所述是小編給大家介紹的在ssm項目中使用redis緩存查詢數(shù)據,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!
新聞熱點
疑難解答