Redis(2)用jedis实现在java中使用redis
来源:互联网 发布:淘宝打假部门联系方式 编辑:程序博客网 时间:2024/06/14 00:29
Redis(2)用jedis实现在java中使用redis
1:windows版 redis。:
2::jar包。
commons-pool2-2.3
jedis-2.7.2.jar
因为redis也是属于一种数据库(NoSql),也是对数据的访问,所以把他放置在dao层,与service分开
import com.dyuproject.protostuff.runtime.RuntimeSchema;
import org.springframework.stereotype.Component;
import com.dyuproject.protostuff.LinkedBuffer;
import com.dyuproject.protostuff.ProtostuffIOUtil;
import com.hdys.www.pojo.ProductList;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
@Component
public class RedisDao {
private final static JedisPool jedisPool;
private Jedis jedis;
// 创建一个schema用来序列化
private RuntimeSchema<ProductList> schema = RuntimeSchema.createFrom(ProductList.class);
/**
* 构造方法
*
* @param ip
* 访问的ip
* @param port
* 访问的端口
*/
/*public RedisDao(String uri, int port) {
jedisPool = new JedisPool(uri, port);
}
*/
//静态代码块初始化jedisPool
static {
//RedisDao redisDao = new RedisDao("localhost", 6379);
jedisPool = new JedisPool("localhost", 6379);
}
public ProductList getProductInfo(int ProductId) {
// redis操作
try {
Jedis jedis = jedisPool.getResource();
try {
// 在redis中存放时,key的书写规则,官方推荐,对象:对象属性
String key = "Product" + ProductId;
// 自定义序列化
// 在redis中获取的值一定是一个字节数组,需要通过反序列化转换成java对象
byte[] bytes = jedis.get(key.getBytes());
if (bytes != null) {
// 获取一个空对象
ProductList productList = schema.newMessage();
// 反序列化后放置在productList中
ProtostuffIOUtil.mergeFrom(bytes, productList, schema);
return productList;
}
} finally {
jedis.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String putProductInfo(ProductList productList) {
try {
Jedis jedis = jedisPool.getResource();
try {
// 通过对应的键存放user对象,建的ID唯一,一般使用ID
String key = "Product" + productList.getSid();
// 自定义序列化操作,利用protostuff将对象序列化成字节数组
byte[] bytes = ProtostuffIOUtil.toByteArray(productList, 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属于性能相当优秀的一种
----------------------------------------------------------------------------我是华丽的分割线——————————————————————————————————————————
JUNIT测试: @Test
public void testRedis(){
//首先去redis中寻找是否存在缓存的用户信息
productInfo = redisDao.getProductInfo(1);
//如果不存在,那就在缓存中放置一个用户信息
if(productInfo == null)
{
//先取到
productInfo=productListService.getProductInfo(2);
//put
String result = redisDao.putProductInfo(productInfo);
System.out.println(result);
}else{
System.out.println("无");
System.out.println(productInfo);
}
}
实际应用:
package com.hdys.www.servicesImp;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.hdys.www.mappers.ProductListMapper;
import com.hdys.www.pojo.ProductList;
import com.hdys.www.redisDao.RedisDao;
import com.hdys.www.services.ProductListService;
@Service
public class ProductListServiceImp implements ProductListService{
private final Logger log = LoggerFactory.getLogger(ProductListServiceImp.class);
@Autowired
private ProductListMapper productListMapper;
private List<ProductList> products;
@Autowired
private ProductList productInfo;
@Autowired
private RedisDao redisDao;
public List<ProductList> getProductList() {
try {
products = productListMapper.selectProducts();
} catch (Exception e) {
log.info("闔キ蜿門膚蜩∝、ア雍・�シ悟シょクク菫。諱ッ�シ�" + e);
}
return products;
}
public ProductList getProductInfo(int sid) {
try {
productInfo = redisDao.getProductInfo(sid);
//如果不存在,那就在缓存中放置一个用户信息
if(productInfo == null)
{
//先取到
productInfo=productListMapper.selectProductsInfo(sid);
//put
redisDao.putProductInfo(productInfo);
}else{
return productInfo;
}
} catch (Exception e) {
log.info("闔キ蜿門膚蜩∽ソ。諱ッ螟ア雍・�シ悟シょクク菫。諱ッ�シ�" + e);
}
return productInfo;
}
}
需要注意的是,如果存放成功,返回是一个字符串“OK”
在使用前一定要确定你的redis服务处于开启状态,cmd窗口是开着的
- Redis(2)用jedis实现在java中使用redis
- Redis使用-java-Jedis
- redis在java中的使用(jedis)
- 【Redis】深入浅出Redis(三)——在项目中使用Jedis对Redis操作
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- 在linux中文件里行尾奇怪的^M及解决
- 将秒钟转换成 "00:00:00" 格式的时间,以及将"00:00:00"格式的时间转换成秒钟
- ajax中dataType中的类型
- 常用maven插件总结-joed
- 工具--打印出项目所有字体的用处
- Redis(2)用jedis实现在java中使用redis
- 使用python执行linux命令
- ios::sync_with_stdio(false) 改变C++流输入输出的速度
- java读取配置文件
- 根据屏幕上的触摸生成平面方程
- 顺序栈的基本操作
- 算法(2.1 初级排序)
- Angular 4 依赖注入教程之一 依赖注入简介
- React-Native-动画基础-抽奖转盘