Redis(二)Redis6新数据类型

5 篇文章 0 订阅

Redis(二)Redis6新数据类型与Spring Boot的整合

新数据类型

Redis6之后增加了三种新的数据类型,Bitmaps、HyperLogLog、Geographic。

Bitmaps

bitmaps(位图)严格上讲并不是新的一种数据类型,而是定义了字符串类型面向位的一组操作。通过在不同位上设置0或者1来存储不同的状态。

  1. 创建位图对象的命令
localhost:6379>setbit key offset value

offset为偏移量,表示要将哪一位设置成0/1。

  1. 获取某一位的状态命令
localhost:6379>getbit key offset

offset为偏移量。返回值为0或者1。对没有设置的位都会返回0。

  1. 统计为1的个数
localhost:6379>bitcount key

或者是

localhost:6379>bitcount key 0, 1

这样可以获取字节0和1中位为1的个数。

  1. 两个key之间进行逻辑运算
localhost:6379>bitop operate destkey key1 key2

operate可选类型为:and,or,xor等逻辑运算。

  1. 找到第一指定为0或者1的位
localhost:6379>bitpos key 0/1 [start] [end]

应用场景

  1. 可以用在统计网站的日活跃用户。
  2. 各种实时分析,例如和对象ID相关的,可以将对象的ID的大小表示为第几位,进而统计相关的信息。

HyperLogLog

是一种概率数据结构,用来统计一个集合中的基数。当数据的量特别大的时候,使用HyperLogLog就可以节省大量的内存,HyperLogLog使用的是固定的大小存储基数,为12KB,可以统计2^64个数据。Redis中统计出来的结果可能与实际的有1%的偏差。

  1. 创建:
localhost:6379>pfadd key value

基数增加成功会返回1,否则返回0.

  1. 统计基数数量:
localhost:6379>pfcount key

在这里插入图片描述

集合{1,2,3, 4, 1, 1, 1, 1} 统计出来的基数就是4。

  1. 合并两个HyperLogLog类型
localhost:6379>pfmerge key key1 key2

应用场景

  1. 统计网站的页面访问量。
  2. 统计独立访客的数量。

Geographic

地图的坐标类型,可以设置经纬度,查询,范围查询的等操作。

  1. 创建
geoadd key 经度 纬度 地点
  1. 获取:
geopos key 地点
  1. 获取两个地点的直线距离
geodist key 地点1 地点2 显示单位

显示单位的可取值为:

km,m,mi(英里),ft(英尺)

  1. 获取一定范围内的数据:
georadius key 经度 纬度 半径长度 显示单位

与Spring Boot的整合

  1. 引入依赖
<!--        整合redis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--        spring2.x版本集成redis所需common-pool2 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>
  1. application.yml中配置属性
spring:
  # redis配置
  redis:
    host: localhost
    port: 6379
    database: 0			# 数据库索引,默认为0
    timeout: 1800000	# 连接超时时间
    lettuce:
      pool:
        max-active: 20	# 连接池中的最大连接数,负值表示没有限制
        max-wait: 1		# 连接池中的最大等待数
        max-idle: 5		# 连接池中的最大空闲数
        min-idle: 0		# 连接池中的最小空闲数
  1. 书写Redis配置类
@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 设置key的序列化方式
        redisTemplate.setKeySerializer(redisSerializer);
        // 设置值的序列化方式
        redisTemplate.setValueSerializer(redisSerializer);
        return redisTemplate;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        // 解决查询缓存转换异常的问题
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
        // 配置序列化,解决乱码问题,过期时间设置为10分钟
        RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(600))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                .disableCachingNullValues();
        RedisCacheManager redisCacheManager = RedisCacheManager.builder(redisConnectionFactory)
                .cacheDefaults(configuration)
                .build();
        return redisCacheManager;
     }
}

配置类的内容都差不多。

  1. 注入RedisTemplate对象
@Autowried
private RedisTemplate redisTemplate;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值