Redis(2)用jedis实现在java中使用redis
昨天已经在windows环境下安装使用了redis。
下面准备在java项目中测试使用redis。
redis官网推荐使用jedis来访问redis。所以首先准备了jedis的jar包,以及需要依赖的jar包。
commons-pool2-2.3
hamcrest-core-1.3
jedis-2.7.2.jar
因为redis也是属于一种数据库,也是对数据的访问,所以把他放置在dao层,与service分开
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool; import com.dyuproject.protostuff.LinkedBuffer;
import com.dyuproject.protostuff.ProtostuffIOUtil;
import com.dyuproject.protostuff.runtime.RuntimeSchema;
import com.xhxkj.ssm.entity.UserEntity; /**
* 访问redis数据层
* @author XX
*
*/
public class RedisDao { private final JedisPool jedisPool;//redis连接池 /**
* 构造方法
* @param ip 访问的ip
* @param port 访问的端口
*/
public RedisDao(String ip, int port)
{
jedisPool = new JedisPool(ip,port);
} //创建一个schema用来序列化
private RuntimeSchema<UserEntity> schema = RuntimeSchema.createFrom(UserEntity.class); /**
* 通过用户名获取redis中对应的用户信息
* @param username 输入的用户名
* @return 存在返回:这个对象,不存在返回:null
*/
public UserEntity getUser(String username)
{
//redis操作
try{
Jedis jedis = jedisPool.getResource();
try {
//在redis中存放时,key的书写规则,官方推荐,对象:对象属性
//也就是获取时利用“user:username”作为键来得到值
String key = "user:" + username; //自定义序列化
//在redis中获取的值一定是一个字节数组,需要通过反序列化转换成java对象
byte[] bytes = jedis.get(key.getBytes());
if(bytes != null)
{
//获取一个空对象
UserEntity user = schema.newMessage();
//反序列化后放置在user中
ProtostuffIOUtil.mergeFrom(bytes, user, schema);
return user;
}
}finally{
jedis.close();
}
}catch (Exception e){
e.printStackTrace();
}
return null;
} /**
* 在缓存中存放user对象
* @param user
* @return 成功返回“OK”;失败返回错误信息
*/
public String putUser(UserEntity user)
{
try {
Jedis jedis = jedisPool.getResource();
try {
//通过对应的键存放user对象
String key = "user:" + user.getUsername(); //自定义序列化操作,利用protostuff将对象序列化成字节数组
byte[] bytes = ProtostuffIOUtil.toByteArray(user, schema,
LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE)); //缓存时间1小时,缓存的时间是用秒来计的
int timeout = 60*60; //在redis中存放这个对象
return jedis.setex(key.getBytes(),timeout,bytes);
} finally{
jedis.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
这里提供了两个方法,分别是put和get,其中需要用到序列化和反序列化的操作,用到的jar包有下面这几个
protostuff-core-1.0.8.jar
protostuff-runtime-1.0.8.jar
protostuff-collectionschema-1.0.8.jar
protostuff-api-1.0.8.jar
protostuff属于性能相当优秀的一种
在spring中配置
<!-- redisDao -->
<bean id="redisDao" class="com.xxx.dao.redis.RedisDao">
<constructor-arg index="0" value="localhost"/>
<constructor-arg index="1" value="6379"/>
</bean>
之后就可以直接在服务层调用redisDao的方法了
//首先去redis中寻找是否存在缓存的用户信息
UserEntity resultUser = redisDao.getUser("xx");
//如果不存在,那就在缓存中放置一个用户信息
if(resultUser == null)
{
String result = redisDao.putUser(user);
System.out.println(result);
return null;
}
else
{
return resultUser;
}
需要注意的是,如果存放成功,返回是一个字符串“OK”
在使用前一定要确定你的redis服务处于开启状态,cmd窗口是开着的
因为网络上面很多都是用maven配置的,所以jar包比较难找,jar包间的依赖确实比较麻烦,推荐一个网站http://maven.outofmemory.cn/
这个网站能很好的找到各种jar包,并且告诉你依赖的关系,非常方便
Redis(2)用jedis实现在java中使用redis的更多相关文章
- Redis入门教程(三)— Java中操作Redis
在Redis的官网上,我们可以看到Redis的Java客户端众多 其中,Jedis是Redis官方推荐,也是使用用户最多的Java客户端. 开始前的准备 使用jedis使用到的jedis-2.1.0. ...
- Redis笔记(六):Java中使用Redis
Java程序使用Redis 添加依赖包 Maven依赖方式 <dependency> <groupId>redis.clients</groupId> <ar ...
- 在java中使用redis
在java中使用redis很简单,只需要添加jedist.jar,通过它的api就可以了.而且,api和redis的语法几乎完全相同.以下简单的测试: 参考:http://www.runoob.com ...
- JAVA中使用Redis
上节讲解了如何在centos上安装redis,点击查看.本节我们学习在java中使用redis.需要将jedis-*.jar添加到classpath(点击下载),如果使用连接池还需要commons-p ...
- redis的介绍与操作及Django中使用redis缓存
redis VS mysql的区别 """ redis: 内存数据库(读写快).非关系型(操作数据方便) mysql: 硬盘数据库(数据持久化).关系型(操作数据间关系) ...
- java中的redis工具类
1.redis基础类 package com.qlchat.component.redis.template; import javax.annotation.PostConstruct; impor ...
- java中使用redis --- Hash的简单应用
1.java代码 public class RedisTest01 { public static void main(String[] args) { // connect redis server ...
- java中使用redis --- List列表的简单应用
1.Dos中启动server端 2.idea中启动client端 public class RedisTest01 { public static void main(String[] args){ ...
- Java中的Redis 哨兵高可用性
让我们探索Redis Sentinel,看看如何在Java上运行它,一起来看看,最近get了很多新知识,分享给大家参考学习.需要详细的java架构思维导图路线也可以评论获取! 什么是Redis哨兵? ...
随机推荐
- 安装jar包到本地maven仓库
1.打开cmd 直接输入一下命令 自己下载的jar包放在d盘根目录下,jar名字叫spring-context-support-3.1.0.RELEASE.jar DgroupId后面写的是group ...
- 关于echarts使用的各种问题
此文为作者辛苦编写,如有转发,请注明出处,谢谢 首先引入js文件,这是动态引入 <script src="http://echarts.baidu.com/build/dist/ech ...
- python 实现excel转化成json文件
1.准备工作 python 2.7 安装 安装xlrd -- pip install xlrd 2. 直接上代码 import xlrd from collections import Ordered ...
- MVC 包命名规范
action+form = model actionservlet+struts-config.xml= controller jsp+自定义标签=veiw 备注:这里说明的非常好 m ...
- 学习笔记——迭代器模式Iterator
迭代器模式,使用很多,但是很少实现.常用的集合都支持迭代器. 集合中的CreateIterator()可用于创建自己的迭代器,在里面通过调用迭代器的构造函数Iterator(Aggregate)来绑定 ...
- Nexus Maven 私服搭建
1.下载Nexus安装文件:http://www.sonatype.org/nexus/go ,目前是nexus-2.13.0-01-bundle.tar.zip这个最新版本: 2.解压到任意目录,我 ...
- DLL and LIB
在StackOverflow中看到一个提问“what's the difference between DLL's and LIB's?” 有如下回复值得参考: 回复一:
- 翻译-你必须知道的28个HTML5特征、窍门和技术
摘自by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=1058 前端的发 ...
- thinkphp整合系列之phpqrcode生成二维码
php生成二维码其实挺简单的:当然指的是使用qrcode类库: 因此关于是否要写这篇博客:我是犹豫了再三的: 不过最后还是决定写下吧:如果有童鞋急着用:就可以直接引了: 再个也可以作为即将写的文章微信 ...
- hdu_5029_relief grain(树链剖分)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5029 题意:给你一个树,然后给你两点,将这两点之间的点涂上颜色,问涂色最多的那个颜色是什么,如果数量相 ...