head请求_Redis【二】SpringBoot + Redis + Mysql 配置head请求头的验证

  • Post author:
  • Post category:mysql


一、效果

fcf80c23f89c966596418e4cca08f23c.png

bee69aebce5ad6082d3e5ef872fa4f3c.png

195c8b294365fede875943f70f197796.png

二、配置

1.配置pom.xml

          <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-data-redisartifactId>        dependency>      <dependency>          <groupId>redis.clientsgroupId>          <artifactId>jedisartifactId>      dependency>    <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-cacheartifactId>                   dependency>

2.配置spring.xml

##################Redis配置######### Redis服务器地址spring.redis.host=127.0.0.1# Redis服务器连接端口spring.redis.port=6379# Redis服务器连接密码(默认为空)spring.redis.password=123456789# 连接池最大连接数(使用负值表示没有限制)spring.redis.pool.max-active=8# 连接池最大阻塞等待时间(使用负值表示没有限制)spring.redis.pool.max-wait=-1# 连接池中的最大空闲连接spring.redis.pool.max-idle=8# 连接池中的最小空闲连接spring.redis.pool.min-idle=0# 连接超时时间(毫秒)spring.redis.timeout=0spring.redis.commandTimeout=5000#连接的数据库spring.redis.database=0# redis.clusterspring.redis.cluster.nodes=127.0.0.1:6379##########################################################################

3.配置CacheManager

直接配置会提示错误:

0a524cb77f5c3ea8f534e85c29426227.png

new RedisCacheManager(redisTemplate)没有此构造

现在这么写会有报错The constructor RedisCacheManager(RedisTemplate) is undefined。

这是因为Spring Boot 2.x版本删除了RedisCacheManager这个构造器, 也不可以通过之前的setDefaultExpiration方法设置默认的缓存过期时间等。

通过设置RedisConnectionFactory  factory进行解决,最后RedisConfig.java如下:

 /*** * 配置redis缓存 * @author Administrator * */@Configuration@EnableCaching//启用缓存public class RedisConfig extends CachingConfigurerSupport{        //注入 RedisConnectionFactory    @Autowired    public RedisConnectionFactory redisConnectionFactory;            //实例化 RedisTemplate 对象 设置数据存入 redis 的序列化方式    @Bean    public RedisTemplate<String, Object> functionDomainRedisTemplate() {        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();       //定义key生成策略        redisTemplate.setKeySerializer(new StringRedisSerializer());        redisTemplate.setHashKeySerializer(new StringRedisSerializer());        redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());        redisTemplate.setConnectionFactory(redisConnectionFactory);        return redisTemplate;    }     //缓存管理器 --》配置缓存时间    @Bean    public CacheManager cacheManager(RedisConnectionFactory  factory) {        RedisCacheConfiguration config =  RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(-1));        RedisCacheManager cacheManager =  RedisCacheManager.builder(factory).cacheDefaults(config).build();        return cacheManager;    } }

447ee47977470b742b909a2da6a8331b.png


创建实体类,一定要实现Serializable


序列化,


因为redis保存对象的时候要求对象是序列化

如:

fb403e45fc5253933390f8d1a78e5bdb.png

实体类配置好后,将redis的操作的接口类进行封装后,进行使用:

public interface  RedisService{      public boolean set(final String key, Object value);         public boolean set(final String key, Object value, Long expireTime);         public void remove(final String... keys);         public void removePattern(final String pattern);         public void remove(final String key);         public boolean exists(final String key);         public Object get(final String key);         public void hmSet(String key, Object hashKey, Object value);            public Object hmGet(String key, Object hashKey);         public void lPush(String k,Object v);         public List<Object> lRange(String k, long l, long l1);         public void add(String key,Object value);         public Set<Object> setMembers(String key);         public void zAdd(String key,Object value,double scoure);          public Set<Object> rangeByScore(String key,double scoure,double scoure1);  }
package  ***; import java.io.Serializable;import java.util.List;import java.util.Set;import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.HashOperations;import org.springframework.data.redis.core.ListOperations;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.SetOperations;import org.springframework.data.redis.core.ValueOperations;import org.springframework.data.redis.core.ZSetOperations;import org.springframework.stereotype.Service; @SuppressWarnings("all")@Servicepublic class RedisServiceImpl  implements  RedisService{     @Autowired    private RedisTemplate redisTemplate;    /**     * 写入缓存     * @param key     * @param value     * @return     */    public boolean set(final String key, Object value) {        boolean result = false;        try {            ValueOperationsObject> operations = redisTemplate.opsForValue();            operations.set(key, value);            result = true;        } catch (Exception e) {            e.printStackTrace();        }        return result;    }    /**     * 写入缓存设置时效时间     * @param key     * @param value     * @return     */    public boolean set(final String key, Object value, Long expireTime) {        boolean result = false;        try {            ValueOperationsObject> operations = redisTemplate.opsForValue();            operations.set(key, value);            redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);            result = true;        } catch (Exception e) {            e.printStackTrace();        }        return result;    }    /**     * 批量删除对应的value     * @param keys     */    public void remove(final String... keys) {        for (String key : keys) {            remove(key);        }    }     /**     * 批量删除key     * @param pattern     */    public void removePattern(final String pattern) {        Set keys = redisTemplate.keys(pattern);        if (keys.size() > 0)            redisTemplate.delete(keys);    }    /**     * 删除对应的value     * @param key     */    public void remove(final String key) {        if (exists(key)) {            redisTemplate.delete(key);        }    }    /**     * 判断缓存中是否有对应的value     * @param key     * @return     */    public boolean exists(final String key) {        return redisTemplate.hasKey(key);    }    /**     * 读取缓存     * @param key     * @return     */    public Object get(final String key) {        Object result = null;        ValueOperationsObject> operations = redisTemplate.opsForValue();        result = operations.get(key);        return result;    }    /**     * 哈希 添加     * @param key     * @param hashKey     * @param value     */    public void hmSet(String key, Object hashKey, Object value){        HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();        hash.put(key,hashKey,value);    }     /**     * 哈希获取数据     * @param key     * @param hashKey     * @return     */    public Object hmGet(String key, Object hashKey){        HashOperations<String, Object, Object>  hash = redisTemplate.opsForHash();        return hash.get(key,hashKey);    }     /**     * 列表添加     * @param k     * @param v     */    public void lPush(String k,Object v){        ListOperations<String, Object> list = redisTemplate.opsForList();        list.rightPush(k,v);    }     /**     * 列表获取     * @param k     * @param l     * @param l1     * @return     */    public List<Object> lRange(String k, long l, long l1){        ListOperations<String, Object> list = redisTemplate.opsForList();        return list.range(k,l,l1);    }     /**     * 集合添加     * @param key     * @param value     */    public void add(String key,Object value){        SetOperations<String, Object> set = redisTemplate.opsForSet();        set.add(key,value);    }     /**     * 集合获取     * @param key     * @return     */    public Set<Object> setMembers(String key){        SetOperations<String, Object> set = redisTemplate.opsForSet();        return set.members(key);    }     /**     * 有序集合添加     * @param key     * @param value     * @param scoure     */    public void zAdd(String key,Object value,double scoure){        ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();        zset.add(key,value,scoure);    }     /**     * 有序集合获取     * @param key     * @param scoure     * @param scoure1     * @return     */    public Set<Object> rangeByScore(String key,double scoure,double scoure1){        ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();        return zset.rangeByScore(key, scoure, scoure1);    }   }


便于redis-key的整理,创建一个key的管理文件,进行将所有要缓存的业务类进行统一管理,如

/**** * 整合redis缓存key文件 * @author Administrator * */public class RedisServiceKey  {  public static final String Product_REDIS_KEY = "Product_KEY"; }

基本配置就全部完成,可以启动。

所有配置文件在资源中:【https://download.csdn.net/download/qq_31653405/12440229 】

启动后可能遇见的问题:

1.问题:HostAndPort need to be seperated by ‘:’.

6637f45c8b9af7de86fd5917bd2d4ffd.png


解决

如上图,添加端口127.0.0.1:6379


扩展:

host变成ip:port,集群多个ip和端口用“,”分割,

2.

问题

:再次启动出现问题:org.springframework.data.redis.core.HashOperations

df0647e2ffd83e2c126ee5449823c5c2.png


解决

原因就是,缺少redis中HashOperationsbean,其实在下面已经提示了,所以在redisconfig中注入bean,并同时在再调用下就可以了,

  //实例化 HashOperations 对象,可以使用 Hash 类型操作    @Bean    public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {        return redisTemplate.opsForHash();    }           //实例化 ValueOperations 对象,可以使用 String 操作    @Bean    public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {        return redisTemplate.opsForValue();    }    //实例化 ListOperations 对象,可以使用 List 操作    @Bean    public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {        return redisTemplate.opsForList();    }     //实例化 SetOperations 对象,可以使用 Set 操作    @Bean    public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {        return redisTemplate.opsForSet();    }     //实例化 ZSetOperations 对象,可以使用 ZSet 操作    @Bean    public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {        return redisTemplate.opsForZSet();    }

如上图的*Service.java文件中

304ff01a8e1cfd9f557de0b49487e8b0.png

访问这个文章【 https://blog.csdn.net/hello_world_qwp/article/details/81205921 】

3.问题:Cannot retrieve initial cluster partitions from initial URIs [RedisURI [host=’127.0.0.1′, port=6379]]

当前问题说:在配置redis集群时,地址用的是127的IP

解决 :在配置集群时,一定要用IP地址,不要用127/localhost等代替IP

4.问题:Command timed out 连接请求超时

将spring.xml中时间设长一点

# 连接超时时间(毫秒)

spring.redis.timeout=200

spring.redis.commandTimeout=500000

通过上面的配置完全解决这个问题的所在.

有问题的可以评论!!!!!!!

版权声明:本文为CSDN博主「快找一个值得变态的事情去做!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_31653405