Redis(2)用jedis实现在java中使用redis

java

昨天已经在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 >


        <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 的全部内容, 来源链接: utcz.com/z/393986.html

回到顶部