Spring Boot redis 配置 以及 redis中各种数据类型在Java中的使用

衔接上篇文章 :Spring Boot 项目集成 Swagger 实例文档 

StringRedisTemplate和RedisTemplate的区别:

  • 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据
  • 序列化方式不同 RedisTemplate使用的是JdkSerializationRedisSerializer   存入数据会将数据先序列化成字节数组然后在存入Redis数据库  StringRedisTemplate使用的是StringRedisSerializer

  • StringRedisTemplate主要用来存储字符串,StringRedisSerializer的泛型指定的是String。当存入对象时,会报错 :can not cast into String 可见性强,更易维护。如果都是字符串存储可考虑用StringRedisTemplate

  • RedisTemplate可以用来存储对象,但是要实现Serializable接口,以二进制数组方式存储,内容没有可读性  若要有可读性则 方案一:手动转化成json串再存储,取出数据需要反序列化  方案二:使用其他序列化方式

了解 Redis 并在 Spring Boot 项目中使用 Redis

Spring中使用RedisTemplate操作Redis

RedisTemplate常用方法总结

RedisTemplate map集合使用说明-opsForHash(三)

Redis中的一个异常:Cannot get Jedis connection

redis修改密码不生效问题

 

redis.conf 参数配置

redisConfig类:

@Configuration
public class RedisConfig {

    @Bean
    @ConditionalOnMissingBean(name = "redisTemplate")
    public RedisTemplate<String, Object> redisTemplate(
            RedisConnectionFactory redisConnectionFactory) {

        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);

        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(redisConnectionFactory);
        //template.setKeySerializer(jackson2JsonRedisSerializer);
        template.setKeySerializer(stringRedisSerializer);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //template.setHashKeySerializer(jackson2JsonRedisSerializer);
        template.setHashKeySerializer(stringRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }

    @Bean
    @ConditionalOnMissingBean(StringRedisTemplate.class)
    public StringRedisTemplate stringRedisTemplate(
            RedisConnectionFactory redisConnectionFactory) {
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
}

XML配置版本:

<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
	<property name="connectionFactory" ref="jedisConnFactory"/>  
	<property name="keySerializer"><!--处理KEY乱码问题-->
		<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
	</property>
	<property name="hashKeySerializer"><!--处理KEY乱码问题-->
		<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
	</property>
	<property name="valueSerializer">
		<bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
	</property>
	<property name="hashValueSerializer">
		<bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
	</property>
</bean> 

redis依赖:

      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

linux环境下redis.conf配置文件修改:

用到的命令:

编辑文件
vim redis.conf

关键字搜索 
/关键字
键入 n 查找下一出

修改 
    键入  i
退出
    键入 esc
保存 
    :wq
不保存
    :q!

配置连接密码:

requirepass root

启用守护进程: 

daemonize yes

取消保护模式:

扫描二维码关注公众号,回复: 12707716 查看本文章
protected-mode no

 注释掉bind 127.0.0.1 关闭只能本机访问的限制:

#bind 127.0.0.1

防火墙配置  开放6379端口:

查看6379防火墙状态
firewall-cmd --zone=public --query-port=6379/tcp

开放端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent 

重载  ==>执行此命令 开放端口才能生效
firewall-cmd --reload

再次查看   返回为yes 即表示配置成功
firewall-cmd --zone=public --query-port=6379/tcp

修改完配置文件 记得重启服务 :!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

./redis-server ./redis.conf

redis配置范例:

有个问题:springboot 2.x版本中默认客户端是用 lettuce实现的 ,若将配置文件中的jedis 替换为lettuce则项目启动报错

springboot系列文章之 集成redis 服务 (Lettuce & Jedis)

  • application.properties中配置Redis连接信息
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=192.168.200.129
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=root
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-idle=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-active=5
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=1
# 连接超时时间(毫秒)
spring.redis.timeout=5000

测试redis存储对象

打印结果:People(name=ww, address=ee)----------------------{name=jack, class=1, age=27}

//  redisTemplate.setKeySerializer(new StringRedisSerializer());  设置key的编码
        //方式一:
        redisTemplate.opsForValue().set("p", new People("ww", "ee"));
        People p = (People) redisTemplate.opsForValue().get("p");
        //方式二:
        Map<String, Object> testMap = new HashMap();
        testMap.put("name", "jack");
        testMap.put("age", 27);
        testMap.put("class", "1");
        redisTemplate.opsForHash().putAll("hash1", testMap);
        //
        System.out.println(p + "----------------------" + redisTemplate.opsForHash().entries("hash1"));

关于redis集群:

Redis 集群教程

猜你喜欢

转载自blog.csdn.net/xiangwang2016/article/details/105893307
今日推荐