redis的安装(windows)
安装版和解压版,解压版需要配置环境变量
下载地址 : https://github.com/MSOpenTech/redis/releases
启动redis
cmd窗口中输入 redis-server.exe
(确保redis路径已加入环境变量中)
启动成功后显示,此窗口关闭redis服务器也就会关闭 默认端口6379
连接redis
此时打开另一个cmd窗口,输入 redis-cli.exe -h 127.0.0.1 -p 6379
显示host和端口号即为成功
简单的redis操作可以参考 http://doc.redisfans.com/
java中利用jedis连接redis
maven依赖如下 此处为jdk1.7 redis3.2 jedis2.4是没有问题的(如有报错尝试更换版本)
redis.clients
jedis
2.4.2
测试类如下
package com.zzipsun.test;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.Jedis;
/**
* @author zs
*/
public class RedisTest {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//查看服务是否运行
System.out.println("服务正在运行: "+jedis.ping());
//存储数据到列表中
jedis.lpush("site-list", "Runoob");
jedis.lpush("site-list", "Google");
jedis.lpush("site-list", "Taobao");
// 获取存储的数据并输出
List list = jedis.lrange("site-list", 0 ,0);
for(int i=0; i keys = jedis.keys("*");
Iterator it=keys.iterator() ;
while(it.hasNext()){
String key = it.next();
System.out.println(key);
}
}
}
org.springframework.data
spring-data-redis
1.3.4.RELEASE
(2)
redis.properties 配置文件
#访问地址
host=127.0.0.1
#访问端口
port=6379
#注意,如果没有password,此处不设置值,但这一项要保留
password=
#数据库下标
dbIndex=0
#最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
maxIdle=300
#连接池的最大数据库连接数。设为0表示无限制
maxActive=600
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
maxWait=1000
#在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;
testOnBorrow=true
(3)
spring-redis配置文件(此处包含了数据库和mybatis的配置)
(4)
redis工具类(此处try catch为防止redis宕机等问题时 方法可以继续执行)
package com.zzipsun.util;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
/**
*
* @author
* 基于spring和redis的redisTemplate工具类
* 针对所有的hash 都是以h开头的方法
* 针对所有的Set 都是以s开头的方法 不含通用方法
* 针对所有的List 都是以l开头的方法
*/
@Component("redisUtil")
public class RedisUtil {
private RedisTemplate redisTemplate;
public void setRedisTemplate(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
//=============================common============================
/**
* 指定缓存失效时间
* @param key 键
* @param time 时间(秒)
* @return
*/
public boolean expire(String key,long time){
try {
if(time>0){
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据key 获取过期时间
* @param key 键 不能为null
* @return 时间(秒) 返回0代表为永久有效
*/
public long getExpire(String key){
return redisTemplate.getExpire(key,TimeUnit.SECONDS);
}
/**
* 判断key是否存在
* @param key 键
* @return true 存在 false不存在
*/
public boolean hasKey(String key){
try {
return redisTemplate.hasKey(key);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除缓存
* @param key 可以传一个值 或多个
*/
@SuppressWarnings("unchecked")
public void del(String ... key){
if(key!=null&&key.length>0){
if(key.length==1){
redisTemplate.delete(key[0]);
}else{
redisTemplate.delete(CollectionUtils.arrayToList(key));
}
}
}
//============================String=============================
/**
* 普通缓存获取
* @param key 键
* @return 值
*/
public Object get(String key){
return key==null?null:redisTemplate.opsForValue().get(key);
}
/**
* 普通缓存放入
* @param key 键
* @param value 值
* @return true成功 false失败
*/
public boolean set(String key,Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 普通缓存放入并设置时间
* @param key 键
* @param value 值
* @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
* @return true成功 false 失败
*/
public boolean set(String key,Object value,long time){
try {
if(time>0){
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
}else{
set(key, value);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 递增
* @param key 键
* @param by 要增加几(大于0)
* @return
*/
public long incr(String key, long delta){
if(delta<0){
throw new RuntimeException("递增因子必须大于0");
}
return redisTemplate.opsForValue().increment(key, delta);
}
/**
* 递减
* @param key 键
* @param by 要减少几(小于0)
* @return
*/
public long decr(String key, long delta){
if(delta<0){
throw new RuntimeException("递减因子必须大于0");
}
return redisTemplate.opsForValue().increment(key, -delta);
}
//================================Map=================================
/**
* HashGet
* @param key 键 不能为null
* @param item 项 不能为null
* @return 值
*/
public Object hget(String key,String item){
try {
return redisTemplate.opsForHash().get(key, item);
} catch (Exception e) {
return null;
}
}
/**
* 获取hashKey对应的所有键值
* @param key 键
* @return 对应的多个键值
*/
public Map
(5)
将spring-redis.xml包含到web.xml中
DispatcherServlet
DispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:conf/spring-*.xml --此处包含所有spring配置文件
1
(6)
在需要redis的业务类中注入redisUtil
此处用一个方法理解redis的使用
/**
* ArticleServiceImp.java
*/
package com.zzipsun.service.imp;
import java.sql.Array;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.zzipsun.dao.ArticleDao;
import com.zzipsun.entity.Article;
import com.zzipsun.service.base.ArticleService;
import com.zzipsun.util.Log4JUtil;
import com.zzipsun.util.RedisUtil;
/**
* @author zs
*
*/
@Service("articleService")
public class ArticleServiceImp implements ArticleService {
Logger log=Logger.getLogger(ArticleServiceImp.class);
@Resource
ArticleDao articleDao;
@Value("#{jdbc.pagesize}")
int pageSize;
@Resource
RedisUtil redisUtil;
/* (non-Javadoc)
* @see com.zzipsun.service.base.ArticleService#findArticleById(java.lang.String)
*/
//查看一个文章
public Article findArticleById(String articleId) {
if(articleId.trim()==""||articleId==null) {
throw new RuntimeException("您查看的文章找不到了");
}
//尝试从redis缓冲中获取map中的article实体对象
Article article=(Article)redisUtil.hget("article", articleId);
if(article!=null) {
log.debug("redis中的id为"+articleId+"的article标题为"+article.getTitle());
}
//如果redis缓存中不存在此文章
if(article==null) {
//数据库查询
article=articleDao.findArticleById(articleId);
//存入redis中
redisUtil.hset("article", articleId, article);
}
return article;
}
}
新手最大的问题就是版本问题,可以多百度