ssm框架 windows系统 jdk13
1.首先导入依赖
<!-- redis客户端:Jedis--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.3</version> </dependency>
<!--prostuff序列化依赖 --> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.0.8</version> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-runtime</artifactId> <version>1.0.8</version> </dependency>
2.启动redis
redis-server --service-start 在命令行输入
3.因为是针对于数据进行缓存的,所以需要在Dao层设置Redisdao工具类
public class RedisDao {
private final JedisPool jedisPool;
public RedisDao(String ip, int port) {
jedisPool = new JedisPool(ip, port);
}
private RuntimeSchema<Product> schema = RuntimeSchema.createFrom(Product.class);
public Product getProduct(String id) {
// redis操作逻辑
try {
Jedis jedis = jedisPool.getResource();
try {
String key = "product:" + id;
// 并没有实现自带的序列化操作
// 采用自定义序列化 占用内存较低,并且速度快
// protostuff: pojo.
byte[] bytes = jedis.get(key.getBytes());
// 缓存重获取到
if (bytes != null) {
Product product = schema.newMessage();
ProtostuffIOUtil.mergeFrom(bytes, product, schema);
// seckill被反序列化
return product;
}
} finally {
jedis.close();
}
} catch (Exception e) {
}
return null;
}
public String putProduct(Product product) {
try {
Jedis jedis = jedisPool.getResource();
try {
String key = "product:" + product.getId();
byte[] bytes = ProtostuffIOUtil.toByteArray(product, schema,
LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));
// 超时缓存
int timeout = 60 * 60;// 1小时
String result = jedis.setex(key.getBytes(), timeout, bytes);
return result;
} finally {
jedis.close();
}
} catch (Exception e) {
}
return null;
}
}
注意:使用protostuff序列化工具时,被序列化的对象必须是pojo对象(具备setter/getter)
4.在dao层的xml文件中,手动注入RedisDao
<!--redisDao -->
<bean id="redisDao" class="com.itheima.ssm.dao.cache.RedisDao">
<constructor-arg index="0" value="localhost" />
<constructor-arg index="1" value="6379" />
</bean>
这里是直接注入了地址和端口,其实还可以在配置文件中编写,然后在这里导入。
由于RedisDao和MyBatis的DAO没有关系,MyBatis不会帮我们自动实现该接口,所以需要手动注入RedisDao。
由于我们在RedisDao是通过构造方法来注入ip和port两个参数的,所以需要配置,如果不配置这个标签,我们需要为ip和port提供各自的setter和getter(注入时可以没有getter)。
5.修改ProductServiceImpl
这个主要就是根据自己项目的设计来做
6.进行测试
https://blog.csdn.net/qq_34450769/article/details/79881778