cv编程-springboot对接redis

模板类的选择

   常用的有两个模板类

public RedisTemplate redisTemplate;

public StringRedisTemplate stringRedisTemplate;

  首先要根据存入redis库里的数据是否可读来决定采用这两种的哪一种。

  redisTemplate

   是经过序列化后存储到redis,它的大多数序列化方式包括默认的序列化方式存到库里的数据,都是人不能直接读的,需要从redis中取出来后通过反序列化的方式转成对象再进行操作
在这里插入图片描述

   stringRedisTemplate

   是对redisTemplate的包装,采用的是StringRedisSerializer 来序列化key和value。我们可以直接通过可视化工具来读redis库里的数据。需要注意的是stringRedisTemplate存储的时候只接受string,不是的话会报错。
在这里插入图片描述

如果是链接的库中已经有数据了,则要根据库中数据是否可以人直接读来判断使用那种。

通用配置文件

//端口,ip,库,密码
spring.redis.host = ****
spring.redis.port = ****
//redis数据库默认有16个库,注意你要写入那个库
spring.redis.database = ****
spring.redis.password = ****
//超时时间 用于设置Redis连接超时时间。当Redis连接超时时,会抛出JedisConnectionException异常。该属性的默认值为200毫秒(2秒)
spring.redis.timeout = 10s
//最小空闲连接数
spring.redis.lettuce.pool.min-idle = 0
//最大空闲连接数
spring.redis.lettuce.pool.max-idle = 8
//最大连接数
spring.redis.lettuce.pool.max-active = 8
//获取链接等待时间,
spring.redis.lettuce.pool.max-wait = -1ms

2 stringRedisTemplate

(1)依赖:
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
	<version>2.1.4.RELEASE</version>
</dependency>

   然后注入StringRedisTemplate就可以直接使用了,十分简单方便。
   新手无脑stringRedisTemplate,简单易操作,事少。如果有速度和空间需求或者库里已经存了字节数据另说。如果没有。直接用。

3 redisTemplate

   它提供了以下几种序列化方式

GenericToStringSerializer: 可以将任何对象泛化为字符串并序列化
Jackson2JsonRedisSerializer: 跟JacksonJsonRedisSerializer实际上是一样的
JacksonJsonRedisSerializer: 序列化object对象为json字符串
JdkSerializationRedisSerializer: 序列化java对象
StringRedisSerializer: 简单的字符串序列化,stringRedisTemplate就是使用这种。

优势对比

  JdkSerializationRedisSerializer序列化后长度最小,
  Jackson2JsonRedisSerializer效率最高。
  如果综合考虑效率和可读性,牺牲部分空间,推荐key使用StringRedisSerializer,保持的key简明易读;value可以使用Jackson2JsonRedisSerializer
  如果空间比较敏感,效率要求不高,推荐key使用StringRedisSerializer,保持的key简明易读;value可以使用JdkSerializationRedisSerializer

4两种的区别

在这里插入图片描述
在这里插入图片描述
StringRedisTemplate就是序列化方式都选StringRedisSerializer的redisTemplate。

   但是由于redisTemplate可选的key序列化方式的不同,如果你的项目里两种方式都存在的话。
都写入相同的键值对(“key”,"value’)。那么由于StringRedisTemplate直接存字符”key“到redis,
redisTemplate存入序列化后的值到redis,会导致redis认为这个是两个key,用可视化工具观察到的结果分别为字符串“key”和一串序列化后的乱码。除非redisTemplate的key也选用的是StringRedisSerializer的序列化方式。那么两种template的key就没有区别了。

阿里的

FastJson2JsonRedisSerializer,虽然稳定性不如redis提供的,但是很香。

详细代码:

@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport
{
 @Bean
@SuppressWarnings(value = { "unchecked", "rawtypes" })
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
{
    RedisTemplate<Object, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(connectionFactory);

    FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);

    ObjectMapper mapper = new ObjectMapper();
    mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
    serializer.setObjectMapper(mapper);

    // 使用StringRedisSerializer来序列化和反序列化redis的key值
    template.setKeySerializer(new StringRedisSerializer());
    template.setValueSerializer(serializer);

    // Hash的key也采用StringRedisSerializer的序列化方式
    template.setHashKeySerializer(new StringRedisSerializer());
    template.setHashValueSerializer(serializer);

    template.afterPropertiesSet();
    return template;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot使用Spring Data Redis进行Redis Geo操作,需要在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.0</version> </dependency> ``` 然后在application.properties文件中配置Redis相关信息: ```properties # Redis spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= ``` 接下来,我们需要创建一个RedisGeoService来进行Geo操作: ```java @Service public class RedisGeoService { private final RedisTemplate<String, String> redisTemplate; public RedisGeoService(RedisTemplate<String, String> redisTemplate) { this.redisTemplate = redisTemplate; } /** * 添加地理位置信息 * * @param key 键 * @param longitude 经度 * @param latitude 纬度 * @param member 成员 * @return Long */ public Long add(String key, double longitude, double latitude, String member) { Point point = new Point(longitude, latitude); return redisTemplate.opsForGeo().add(key, point, member); } /** * 获取两个地理位置的距离 * * @param key 键 * @param member1 成员1 * @param member2 成员2 * @param unit 距离单位 * @return Distance */ public Distance distance(String key, String member1, String member2, Metric unit) { return redisTemplate.opsForGeo().distance(key, member1, member2, unit); } /** * 获取指定成员的地理位置 * * @param key 键 * @param members 成员 * @return List<Point> */ public List<Point> position(String key, String... members) { return redisTemplate.opsForGeo().position(key, members); } /** * 获取指定地理位置附近的成员 * * @param key 键 * @param longitude 经度 * @param latitude 纬度 * @param radius 半径 * @param unit 距离单位 * @return GeoResults<GeoLocation<String>> */ public GeoResults<GeoLocation<String>> nearBy(String key, double longitude, double latitude, double radius, Metric unit) { Circle circle = new Circle(longitude, latitude, new Distance(radius, unit)); GeoRadiusCommandArgs args = GeoRadiusCommandArgs.newGeoRadiusArgs().sortAscending(); return redisTemplate.opsForGeo().radius(key, circle, args); } } ``` 上述代码中,我们使用RedisTemplate来进行Redis操作。RedisTemplate是Spring Data Redis提供的核心组件,用于执行Redis命令。 在RedisGeoService中,我们定义了四个方法来进行Geo操作: - add方法:添加地理位置信息。 - distance方法:获取两个地理位置的距离。 - position方法:获取指定成员的地理位置。 - nearBy方法:获取指定地理位置附近的成员。 使用Spring BootSpring Data Redis进行Geo操作非常方便,只需要定义一个RedisGeoService,并注入RedisTemplate即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值