咱们在使用springboot搭建微服务的时候,在不少时候仍是须要redis的高速缓存来缓存一些数据,存储一些高频率访问的数据,若是直接使用redis的话又比较麻烦,在这里,咱们使用jedis来实现redis缓存来达到高效缓存的目的,接下来,让咱们一块儿来使用jedis来实现redis缓存java
1.在pom.xml文件中添加依赖redis
<!-- jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.2</version> </dependency>
2. 在springboot的配置文件中加入redis的配置信息spring
#redis jedis配置 # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=10.100.140.84 # Redis服务器链接端口 spring.redis.port=6379 # Redis服务器链接密码(默认为空) #spring.redis.password= # 链接池最大链接数(使用负值表示没有限制) spring.redis.pool.max-active=200 # 链接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 链接池中的最大空闲链接 spring.redis.pool.max-idle=8 # 链接池中的最小空闲链接 spring.redis.pool.min-idle=0 # 链接超时时间(毫秒) spring.redis.timeout=0 #spring-session 使用 spring.session.store-type=none
3.建立jedis配置文件,配置文件的做用是在项目启动的时候将jedis注入,接着咱们就能够在其余类中获取到JedisPool类的信息数据库
@Configuration public class JedisConfig extends CachingConfigurerSupport{ private Logger logger = LoggerFactory.getLogger(JedisConfig.class); /** * SpringSession 须要注意的就是redis须要2.8以上版本,而后开启事件通知,在redis配置文件里面加上 * notify-keyspace-events Ex * Keyspace notifications功能默认是关闭的(默认地,Keyspace 时间通知功能是禁用的,由于它或多或少会使用一些CPU的资源)。 * 或是使用以下命令: * redis-cli config set notify-keyspace-events Egx * 若是你的Redis不是你本身维护的,好比你是使用阿里云的Redis数据库,你不可以更改它的配置,那么可使用以下方法:在applicationContext.xml中配置 * <util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/> * @return */ @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private int port; @Value("${spring.redis.timeout}") private int timeout; @Value("${spring.redis.pool.max-active}") private int maxActive; @Value("${spring.redis.pool.max-idle}") private int maxIdle; @Value("${spring.redis.pool.min-idle}") private int minIdle; @Value("${spring.redis.pool.max-wait}") private long maxWaitMillis; @Bean public JedisPool redisPoolFactory(){ JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(maxIdle); jedisPoolConfig.setMaxWaitMillis(maxWaitMillis); jedisPoolConfig.setMaxTotal(maxActive); jedisPoolConfig.setMinIdle(minIdle); JedisPool jedisPool = new JedisPool(jedisPoolConfig,host,port,timeout,null); logger.info("JedisPool注入成功!"); logger.info("redis地址:" + host + ":" + port); return jedisPool; } }
接下来,咱们启动项目,gogogo缓存
Jedis注入成功了!!!springboot
而后咱们能够定义一个工具类,用于对redis进行各类操做服务器
这里咱们经过@Autowired将JedisPool注入到工具类中,其余两个是命名、序列化的类session
这里,咱们列举一下日常最经常使用的几个方法app
//给某个key设值 public void set(String key, Object value) { Jedis client = getJedis(); try { byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key)); byte[] valueBytes = serializer.serializeValue(value); client.set(keyBytes, valueBytes); } finally { returnJedis(client); } } //根据key获取value public Object get(String key) { Jedis client = getJedis(); try { byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key)); byte[] valueBytes = client.get(keyBytes); return serializer.deserializeValue(valueBytes); } finally { returnJedis(client); } } //根据键值获取value public Object hashGet(String key, String field) { Jedis client = getJedis(); try { byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key)); byte[] fieldBytes = serializer.serializeKey(field); byte[] valueBytes = client.hget(keyBytes, fieldBytes); return serializer.deserializeValue(valueBytes); } finally { returnJedis(client); } } public void hashSet(String key, String field, Object value) { Jedis client = getJedis(); try { byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key)); byte[] fieldBytes = serializer.serializeKey(field); byte[] valueBytes = serializer.serializeValue(value); client.hset(keyBytes, fieldBytes, valueBytes); } finally { returnJedis(client); } } public Map<String, Object> hashAllGet(String key) { Jedis client = getJedis(); try { byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key)); Map<byte[], byte[]> map = client.hgetAll(keyBytes); Map<String, Object> valueMap = Maps.newHashMap(); Set<Map.Entry<byte[], byte[]>> valueSet = map.entrySet(); for (Map.Entry<byte[], byte[]> entry : valueSet) { valueMap.put(serializer.deserializeKey(entry.getKey()), serializer.deserializeValue(entry.getValue())); } return valueMap; } finally { returnJedis(client); } } //判断key是否存在 public boolean existKey(String key) { Jedis client = getJedis(); try { byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key)); return client.exists(keyBytes); } finally { returnJedis(client); } }
在该项目中,咱们发送短信验证码后会将验证码存在redis中去,而后校验的时候会判断用户输入的验证码和缓存中的验证码是否一致,达到目的。微服务