Redis的数据类型

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis的数据类型

Redis存储的是key-value结构的数据,其中key是字符串类型,value有五种常用的数据类型

  • 字符串 : 普通字符串,常用
  • 哈希 : 适合存储对象
  • 列表  :  list按照插入顺序排序,可以有重复元素
  • 集合 : set无序集合,没有重复元素
  • 有序集合 : sorted set 有序集合,没有重复元素

 

Redis是当前比较热门的NoSql系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统。与Memcache类似,但是弥补了Memcache的很多不足之处。与Memcache不同的地方在于,Memcache只能将数据写到内存中,不能实现数据同步到硬盘实现持久化,redis则可以定期的将数据存储到硬盘中,实现数据的持久化。

特点:

  • redis读取速度是110000次/s  写的速度是81000次/s
  • redis的操作都是原子性的
  • 支持多种数据结构:string、list、hash、set、zset
    一般将经常查询,不经常修改的数据,不是特别重要的数据放到redis作为缓存

使用

在common模块引入依赖

   

<!-- 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>
            <version>2.6.0</version>
        </dependency>
写redis的配置文件 (这里需要注意的是需要在启动类中开启包扫描确定可以扫描到common模块中redis的配置类)
@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(redisSerializer);
        //value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        // 配置序列化(解决乱码的问题),过期时间600秒
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(600))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
        return cacheManager;
    }
}
配置application.propertities/ yml
# 配置redis
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.database= 0
spring.redis.timeout=1800000
spring.redis.lettuce.pool.max-active=20
spring.redis.lettuce.pool.max-wait=-1
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-idle=5
spring.redis.lettuce.pool.min-idle=0
在service层加入@Cacheable注解
@Cacheable(key = "'selectIndexList'",value = "banner")
@Override
public List<CrmBanner> getAllList() {
    LambdaQueryWrapper<CrmBanner> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    lambdaQueryWrapper.orderByAsc(CrmBanner::getSort);
    List<CrmBanner> list = baseMapper.selectList(null);
    return list;
}
controller
@GetMapping("/getlist")
public R getList(){
    List<CrmBanner> list = bannerService.getAllList();
    return R.ok().data("rows",list);
}

测试

image.png

查看

image.png

注意:当第一次查询这个接口数据的时候会执行sql语句,当第二次查询数据的时候就不在执行sql语句了,因为数据已经缓存在redis中。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
缓存 NoSQL Redis
Redis雪崩
Redis雪崩
31 0
|
4天前
|
存储 缓存 NoSQL
|
18天前
|
存储 NoSQL Redis
Redis介绍以及日常使用
​ 介绍 Redis(REmote DIctionary Server)是一个开源的、使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、非关系类型的Key-Value数据库。它提供了多种语言的API,如Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等,使得在各种语言环境下使用Redis都变得非常方便。 Redis是一个高性能的Key-Value数据库,其性能在很大程度上补偿了如Memcached这类Key-Value存储的不足,并且在某些场景下,它还可以作为关系数据库的良好补充。它支持的数据结构类型
157 1
|
7月前
|
消息中间件 缓存 NoSQL
Redis总结
Redis总结
21 0
|
8月前
|
消息中间件 缓存 NoSQL
### 1.2 使用Redis能做什么
### 1.2 使用Redis能做什么
28 0
|
12月前
|
存储 SQL 缓存
|
12月前
|
存储 缓存 监控
|
12月前
|
存储 消息中间件 NoSQL
|
存储 NoSQL Unix
redis
redis
90 0
|
消息中间件 存储 缓存
Redis的常用场景有哪些
Redis的常用场景有哪些
123 0