好久不写写博客了,最近不是很忙,就给自己充充电,研究研究redis,最近一些项目也有类似的问题出现,用户频繁访问数据库,并且用户需要的很多数据并不频繁更行,没必要每次都去查询数据库,否则数据库亚历山大啊,尤其是手机平板客户端的一些数据需要频繁交互却又不会频繁更新,对于数据库的鸭梨很大,于是就想着把那些常用的数据放到缓存里,对于缓存框架目前我所知道的只有memcached和redis,redis,一下是个人总结的关于两者之间的区别
1.memcached把数据全部存储在内存,断电后数据就真挂了,数据全部丢失,然而redis会把部分数据转存到硬盘,而且转存方式也是可配置的,也就是redis持久化的可配置更加保障了数据的安全性,即使断电了针对redis的持久化数据并不会安全丢失,再次启动时可以将持久化的数据再一次载入使用,数据丢失的代价不是很大
2.redis所支持的数据类型远比memcached要多的多吧
以上两点我想是他们最主要的区别了吧,小弟才疏学浅,若有不对之处请不吝赐教
下面开始配置和整合
1.对于springMVC+jdbc的配置主要在于三个文件applicationContext.xml springmvc-servlet.xml web.xml
@1.首先配置applicationContext.xml。无非就是数据源、事务、以及jdbc模板的配置吧
数据源的配置,此处用了连接池c3p0,引入数据源属性文件
jdbc模板的配置
事务的配置 先配置一个jdbc的事务管理器,然后声明一个事务的切面,也就是事务生效的切面,然后配置对切面下那些方法需要事务拦截,配置均可用通配符如下
@2再看springmvc-servlet.xml的配置 此处配置的是一些拦截器、扫描路径以及一些不需要过滤的文件的路径等等
@3web.xml的配置 此处配置的是一些编码、spring的控制器、以及一些文件的加载配置
webAppRootKey
springmvc.root
contextConfigLocation
classpath:/sysconf/applicationContext.xml
org.springframework.web.context.ContextLoaderListener
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:/sysconf/springmvc-servlet.xml
1
springmvc
*.do
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encodingFilter
/*
/company/main/main.jsp
以下是导入的jar包
下面看spring-data-redis配置 特别的简单 直接在applicationContext.xml中配置如下即可
看上去和那个jdbcTemplete特别像吧?
下面做两个例子来看看
Controller:
@Controller
@RequestMapping("/company/companyModule.do")
public class CModuleController {
@RequestMapping(params="method=test1")
public void test1(){
CModuleInfo info=new CModuleInfo();
info.setId(1000);
info.setModuleCode("1000Code");
info.setModuleIndex("1000");
info.setModuleName("缓存测试");
info.setModulePreCode("#");
info.setModuleStatus("1");
info.setModuleType("1");
info.setModuleUrl("=====");
this.redisService.addCommentInfoCache(info);
}
@RequestMapping(params="method=test2")
public void test2(){
List list=this.redisService.getCommentInfoCache("1000Code");
for (CModuleInfo moduleInfo : list) {
System.out.println(moduleInfo.getModuleCode()+"====="+moduleInfo.getModuleName());
}
}
}
bean:
public class CModuleInfo implements Serializable{
private int id;
private String moduleCode;
private String moduleName;
private String modulePreCode;
private String moduleUrl;
private String moduleStatus;
private String moduleIndex;
private String moduleType;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getModuleCode() {
return moduleCode;
}
public void setModuleCode(String moduleCode) {
this.moduleCode = moduleCode;
}
public String getModuleName() {
return moduleName;
}
public void setModuleName(String moduleName) {
this.moduleName = moduleName;
}
public String getModulePreCode() {
return modulePreCode;
}
public void setModulePreCode(String modulePreCode) {
this.modulePreCode = modulePreCode;
}
public String getModuleUrl() {
return moduleUrl;
}
public void setModuleUrl(String moduleUrl) {
this.moduleUrl = moduleUrl;
}
public String getModuleStatus() {
return moduleStatus;
}
public void setModuleStatus(String moduleStatus) {
this.moduleStatus = moduleStatus;
}
public String getModuleIndex() {
return moduleIndex;
}
public void setModuleIndex(String moduleIndex) {
this.moduleIndex = moduleIndex;
}
public String getModuleType() {
return moduleType;
}
public void setModuleType(String moduleType) {
this.moduleType = moduleType;
}
public CModuleInfo(int id, String moduleCode, String moduleName,
String modulePreCode, String moduleUrl, String moduleStatus,
String moduleIndex, String moduleType) {
super();
this.id = id;
this.moduleCode = moduleCode;
this.moduleName = moduleName;
this.modulePreCode = modulePreCode;
this.moduleUrl = moduleUrl;
this.moduleStatus = moduleStatus;
this.moduleIndex = moduleIndex;
this.moduleType = moduleType;
}
public CModuleInfo() {
super();
// TODO Auto-generated constructor stub
}
}
redis服务接口:
public interface RedisService {
/**
* 添加缓存信息
* @param commentInfo
*/
public void addCommentInfoCache(CModuleInfo commentInfo);
public List getCommentInfoCache(String subjectCommentID);
}
redis接口实现类:
@Service("redisService")
public class RedisServiceImpl implements RedisService {
@Autowired
private RedisTemplate redisTemplate;
private String commentInfoKey="commentInfo";
@Resource(name="redisTemplate")
private ListOperations commentInfoHash;
public void addCommentInfoCache(CModuleInfo commentInfo){
commentInfoHash.leftPush(commentInfoKey+"_"+commentInfo.getModuleCode(), commentInfo);
commentInfoHash.trim(commentInfoKey+"_"+commentInfo.getModuleCode(), 0, 1);
}
public List getCommentInfoCache(String subjectCommentID){
List list= commentInfoHash.range(commentInfoKey+"_"+subjectCommentID, 0, -1);//获取所有
if(list==null)
list= new ArrayList();
return list;
}
}
到这里还应该干一件事情,就是在自己的机子上安装redis服务,并且开启,这个直接去网上下载最新版2.6的redis,解压后,进入解压目录,运行redis-server.exe redis.conf就好了
在这个例子里面 test1是将实体类存到了redis,test2是将存进去的redis取出来 测试是成功的!简单的例子大家可以看看
再抽时间研究研究redis集群,小有成果的话与大家分享