spring-data-redis简单操作

来源:互联网 发布:长沙房地产 知乎 编辑:程序博客网 时间:2024/05/26 09:54

最近因为项目需要用redis,所以研究了下spring-data-redis,为了方便同学们学习,我把代码都贴给同学们了,希望对同学们有所帮助

首先下载redis,这个搜索下教程就行,网上不少。

项目需要的jar包

commons-pool.jar

jedis-2.1.0.jar

spring-data-redis-1.0.1.RELEASE.jar



配置文件:

redis配置(redis.properties):

#最大分配的对象数  redis.pool.maxActive=1024#最大能够保持idel状态的对象数  redis.pool.maxIdle=200#当池内没有返回对象时,最大等待时间  redis.pool.maxWait=1000#当调用borrow Object方法时,是否进行有效性检查  redis.pool.testOnBorrow=true  #IP  redis.ip=127.0.0.1#Port  redis.port=6379



spring 管理redis配置(applicationContext.xml):

<!-- 定义受环境影响易变的变量 --><beanclass="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /><property name="ignoreResourceNotFound" value="true" /><property name="locations"><list><!-- 标准配置 --><value>classpath*:/application.properties</value><value>classpath*:/redis.properties</value><!-- redis配置文件-->                                                              <!-- spring,data,redis,start -->    <beanid="jedisPoolConfig"class="redis.clients.jedis.JedisPoolConfig"><propertyname="maxActive"value="${redis.pool.maxActive}" /><propertyname="maxIdle"value="${redis.pool.maxIdle}" /><propertyname="maxWait"value="${redis.pool.maxWait}" /><propertyname="testOnBorrow"value="${redis.pool.testOnBorrow}" /></bean><beanid="jedisConnectionFactory"class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"><propertyname="hostName"value="${redis.ip}" /><propertyname="port"value="${redis.port}" /><propertyname="poolConfig"ref="jedisPoolConfig" /></bean>       <span style="white-space:pre"></span><beanclass="org.springframework.data.redis.core.RedisTemplate"p:connection-factory-ref="jedisConnectionFactory" /><span style="white-space:pre"></span><bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">        <span style="white-space:pre"></span><property name="connectionFactory" ref="jedisConnectionFactory" />      <span style="white-space:pre"></span></bean> <!-- spring,data,redis,end -->

实体中有三个属性:
package com.ibm.bmcc.qixin.redis.model;// Generated 2014-6-18 21:28:35 by Hibernate Tools 3.4.0.CR1/** * User generated by hbm2java */public class User implements java.io.Serializable {private String id;private String name;private String addr;public User() {}public User(String id) {this.id = id;}public User(String id, String name, String addr) {this.id = id;this.name = name;this.addr = addr;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", addr=" + addr + "]";}public String getId() {return this.id;}public void setId(String id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public String getAddr() {return this.addr;}public void setAddr(String addr) {this.addr = addr;}}

DAO,简单的数据库操作:


package com.ibm.bmcc.qixin.redis.dao;import javax.annotation.Resource;import org.apache.commons.lang.StringUtils;import org.hibernate.Query;import org.hibernate.SessionFactory;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import org.springframework.stereotype.Repository;import com.ibm.bmcc.qixin.redis.model.User;/** * 测试spring-data-redis,数据库操作 * @author zhoudong * */@Repositorypublic class UserDao extends HibernateDaoSupport{@Resource(name = "sessionFactory")// 注入 按名称装配public void setSuperSessionFactory(SessionFactory sessionFactory) {super.setSessionFactory(sessionFactory);}/** * 保存数据库 * @param user */public void save(User user) {getHibernateTemplate().save(user);System.out.println("save db ..");}/** * 根据ID获取user * @param id * @return */public User findUser(String id) {String hql = "from User where id = ?";System.out.println("get for db ..");return (User) getHibernateTemplate().find(hql,id);}/** * 更新user * @param id * @param user */public void updateUser(String id, User user) {StringBuilder hql = new StringBuilder("update User set ");if(StringUtils.isNotBlank(user.getName())){hql.append(" name='").append(user.getName()).append("'");hql.append(" , ");}if(StringUtils.isNotBlank(user.getAddr())){hql.append(" addr='").append(user.getAddr()).append("'");}hql.append(" where id='").append(id).append("'");Query query = getSession().createQuery(hql.toString());query.executeUpdate();}/** * 删除user * @param id */public void deleteUser(String id) {StringBuilder hql = new StringBuilder("delete from User where id='");hql.append(id).append("'");Query query = getSession().createQuery(hql.toString());query.executeUpdate();}}

Service

package com.ibm.bmcc.qixin.redis.service;import org.springframework.stereotype.Service;import com.ibm.bmcc.qixin.redis.model.User;/** * 测试spring-data-redis * 简单的增删查改 * @author zhoudong * */@Servicepublic interface UserService {public void saveUser(User user);public User findUser(String id);public void updateUser(String id, User user);public void deleteUser(String id);}

ServiceImpl

注意:redis的一些操作,均在该类中进行

package com.ibm.bmcc.qixin.redis.service.impl;import java.io.Serializable;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.annotation.Resource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.dao.DataAccessException;import org.springframework.data.redis.connection.RedisConnection;import org.springframework.data.redis.core.BoundHashOperations;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.stereotype.Service;import com.ibm.bmcc.qixin.redis.dao.UserDao;import com.ibm.bmcc.qixin.redis.model.User;import com.ibm.bmcc.qixin.redis.service.UserService;/** * 操作redis主要类 * @author zhoudong * */@Servicepublic class UserServiceImpl implements UserService {@Resourceprivate UserDao userDao;@Resource  private RedisTemplate<Serializable, Serializable> redisTemplate;@Autowiredprivate StringRedisTemplate stringRedisTemplate;/** * redis SET */public void saveUser(final User user) {userDao.save(user);BoundHashOperations<String, String, String> bot = stringRedisTemplate.boundHashOps("user.id." + user.getId());Map<String, String> data = new HashMap<String, String>();data.put("id", user.getId());data.put("name", user.getName());data.put("addr", user.getAddr());bot.putAll(data);}/** * redis  GET */public User findUser(final String id) {return redisTemplate.execute(new RedisCallback<User>() {@Overridepublic User doInRedis(RedisConnection connection)throws DataAccessException { byte[] bkey = redisTemplate.getStringSerializer().serialize("user.id." + id);             if (connection.exists(bkey)) {             List<byte[]> value = connection.hMGet(bkey,                             stringRedisTemplate.getStringSerializer().serialize("id"), stringRedisTemplate                                     .getStringSerializer().serialize("name"), stringRedisTemplate                                     .getStringSerializer().serialize("addr"));             User user = new User();             user.setId(stringRedisTemplate.getStringSerializer().deserialize(value.get(0)));             user.setName(stringRedisTemplate.getStringSerializer().deserialize(value.get(1)));             user.setAddr(stringRedisTemplate.getStringSerializer().deserialize(value.get(2)));             return user;             }             return null;}});}/** * redis UPDATE */public void updateUser(final String id, final User user) {userDao.updateUser(id,user); //db更新//Cache更新redisTemplate.execute(new RedisCallback<User>() {@Overridepublic User doInRedis(RedisConnection conn)throws DataAccessException {byte[] key = redisTemplate.getStringSerializer().serialize(                    "user.id." + id);if(!conn.exists(key)){//判断数据是否存在throw new NullPointerException("缓存中不存在该数据,key=" + String.valueOf(key));}else{BoundHashOperations<String, String, String> bot = stringRedisTemplate.boundHashOps("user.id." + id);Map<String, String> data = new HashMap<String, String>();data.put("id", id);data.put("name", user.getName());data.put("addr", user.getAddr());bot.putAll(data);}return null;}});}/** * redis DELETE */public void deleteUser(final String id) {userDao.deleteUser(id); //db delete// cache deleteredisTemplate.execute(new RedisCallback<User>() {@Overridepublic User doInRedis(RedisConnection conn)throws DataAccessException {byte[] key = redisTemplate.getStringSerializer().serialize(                      "user.id." + id);if(!conn.exists(key)){//判断数据是否存在throw new NullPointerException("缓存中不存在该数据,key=" + String.valueOf(key));}else{conn.del(key); //从redis删除该key对应的数据}return null;}});}}


Action,测试

package com.ibm.bmcc.qixin.redis.view;import java.util.HashMap;import java.util.Map;import javax.annotation.Resource;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.ibm.bmcc.qixin.redis.model.User;import com.ibm.bmcc.qixin.redis.service.UserService;/** * 测试 * @author zhoudong * */@Controllerpublic class UserAction {@Resourceprivate UserService userService;/** * save Test * @param name * @param addr * @return */@RequestMapping("saveUser")@ResponseBodypublic String saveUser(@RequestParam String name,@RequestParam String addr){User user = new User();user.setAddr(addr);user.setName(name);userService.saveUser(user);return "success";}/** * get Test * @param id * @return */@RequestMapping("findUser")@ResponseBodypublic Map<String, User> findUser(@RequestParam String id){User user = userService.findUser(id);Map<String,User> map = new HashMap<String, User>();map.put("user", user);return map;}/** * update Test * @param id * @param name * @param addr * @return */@RequestMapping("updateUser")@ResponseBodypublic String updateUser(@RequestParam String id, @RequestParam String name, @RequestParam String addr){User user = new User();user.setName(name);user.setAddr(addr);userService.updateUser(id, user);return "success";}/** * delete Test * @param id * @return */@RequestMapping("deleteUser")@ResponseBodypublic String deleteUser(@RequestParam String id){userService.deleteUser(id);return "success";}}



这个就可以把数据放在redis中,很多地方我也不太明白,但是知道这么用没错,同学们看到有性能不好的地方请一定指正一下!

小型项目可以使用spring cache 那个挺简单的,上一篇博客中做了部分说明。

0 0
原创粉丝点击