在一个项目中,有访问比较频繁的情况出现,这个时候,如果利用数据库进行处理,效率就会比较慢,这个时候,使用了redis这种NoSql数据库,由于项目的原因,我做了一个demo,用于展示。
我使用的是springboot+mybatis的框架,搭建的过程看我的另一篇博客,在这里附上pom.xml的文件,利用maven进行管理jar包,这里只是部分,要是想看全的,看我的另一篇博客。
org.springframework.boot
spring-boot-starter-data-redis
org.springframework.boot
spring-boot-starter-cache
redis.clients
jedis
2.9.0
这个是文件的目录结构
将redis的一些需要的jar包引入进去之后,我们要封装一个redisutils这个类,用于一些redis的一些基本操作,包括了一些注释。
package cn.aimacademy.spy.spyserver.server.redisservice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Set;
@Service
public class RedisUtilsService {
@Autowired
StringRedisTemplate stringRedisTemplate;
@Resource(name = "stringRedisTemplate")
ValueOperations valOpsStr;
@Autowired
RedisTemplate
写好之后,还需要建立一个redis的config文件,用于配置redis的一些初始化。
package cn.aimacademy.spy.spyserver.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
//缓存管理器 spring boot 2.0后 配置缓存管理器 和2.0以前 不一样 根据自己的版本 配置
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory redisTemplate) {
return RedisCacheManager.create(redisTemplate);
}
// 以下两种redisTemplate自由根据场景选择
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(mapper);
template.setValueSerializer(serializer);
//使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.afterPropertiesSet();
//这里设置redis事务一致
template.setEnableTransactionSupport(true);
return template;
}
@Bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(factory);
stringRedisTemplate.setEnableTransactionSupport(true);
return stringRedisTemplate;
}
}
到这基本也就写完了,这个时候就有人问我,你也没说分页啊,在redis里面,有一个zSet的数据结构,里面可以进行排序操作,redis里面总共有五种数据结构,String,List,Hash,Set,zSet,前面的大家基本都知道了,字符串,集合,哈希,无序集合,有序集合,其实也可以利用List进行分页操作,但是写法和效率都比较慢,所以还是直接使用zSet这个里面的东西了,在刚才那个RedisUtilsServer的类里面最后两个方法封装了zSet的一些方法,其实zSet还有很多的方法,这个时候就是看自己慢慢学了,在这里就不介绍了。
下面是在redis里面进行赋值的操作,其中,第一个属性,是在redis里面标记是那个list的名字,第二个是具体的数据,第三个是排序用的。
List
同样取值的时候,这么取值就可以了。
Set list = redisUtilsService.getZSetByName(CommonUtils.ENT_INFO_LIST,0,5);
下面这个就是CommonUtils
public class CommonUtils {
public final static String ENT_INFO_LIST = "ENT_INFO_LIST";
}
我已经把大部分的代码粘贴出来了,要是有不懂的,或者是有疑问的,可以联系我,qq:1029273212