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
<!-- 定义受环境影响易变的变量 --><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";}}
小型项目可以使用spring cache 那个挺简单的,上一篇博客中做了部分说明。
0 0
- spring-data-redis简单操作
- Spring Data Redis简单操作
- spring-data-redis 操作
- spring data redis 操作redis
- spring data redis 操作redis
- Spring Data Redis简单搭建
- spring-data-redis相关操作
- Spring data redis 操作list
- 使用spring-data-redis操作redis
- spring-data-redis操作redis集群
- spring-data-redis连接操作redis
- Spring-data-redis操作Redis的Sentinel
- Spring-data-redis操作redis知识总结
- Spring-data-redis操作redis知识总结
- spring-data-redis连接操作redis
- Spring-data-redis的简单使用
- 使用Spring-data进行Redis操作
- redis:spring-data-redis
- perl函数说明(chr)
- IOS中scrollsToTop问题小结
- Spine使用
- 通过ssh用rsync无密码传输文件
- 解析XML文件
- spring-data-redis简单操作
- node.js面向对象实现(二)继承
- 互联网创业项目外包的种种坑
- 完全分布式或者伪分布式的hadoop中map和reduce的System.out与System.err的输出去哪儿啦?
- Alibaba Dubbo框架同步调用原理分析-2
- perl函数说明(chroot)
- openstack HA--1(rabbitMQ cluster)
- JAVA必备——EJB,通向大型软件的路!
- 三星数码相机照片恢复,相机格式化后恢复