SpringBoot整合Redis

什么是Redis?

Redis 是由意大利人 Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis 全称为:Remote Dictionary Server(远程数据服务), 该软件使用 C 语言编写,典型的 NoSQL 数据库服务器,== Redis 是一个 key-value 存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。Redis 本质上是一个 Key-Value 类型的内存数据库== ,很像 memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作 ,是已知性能最快的 Key-Value DB。Redis 的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached 只能保存1MB的数据,另外Redis也可以对存入的 Key-Value 设置 expire 时间。Redis 的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此 Redis 适合的场景主要局限在较小数据量的高性能操作和运算上。

Redis适合的场景

(1)、会话缓存(Session Cache)
(2)、全页缓存(FPC)
(3)、队列
(4)、排行榜/计数器
(5)、发布/订阅

Redis的数据结构

Redis 的基本数据结构有五种,分别是:
1、String——字符串
2、Hash——字典
3、List——列表
4、Set——集合
5、Sorted Set——有序集合(简称ZSet)
三种特殊数据类型,分别是:
1、geospatial地理位置
2、Hyperloglog基数统计
3、bitmaps位存储

SpringBoot整合

1、导入redis需要的依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>

2、导入依赖之后就可以使用RedisTemplate的模板了,使用的时候只需要注入进来即可。

@Controller
public class testController {

    @Autowired
    private RedisTemplate redisTemplate;

    @RequestMapping("/v1/redis")
    public void test(){
        /**
         * redisTemplate操作不同的数据类型
         * opsForValue() 操作String类型
         * opsForHash() 操作Hash类型
         * opsForList() 操作List类型
         * opsForSet()  操作Set类型
         * opsForZSet() 操作ZSet类型
         * opsForGeo()  地图
         * opsForHyperLogLog() 基数统计
         */
        redisTemplate.opsForValue().set("name","zhao");
        System.out.println(redisTemplate.opsForValue().get("name"));
    }
}

在控制会把name的值输出出来,但如果用客户端查看会发现,name会变成如下图所示,值也是不可见的
在这里插入图片描述
原因是默认使用的redis模板使用的是jdbc序列化的方式,所以我们需要把jdbc的方式改成json的方式,

3、配置一个json的方式

@Configuration
public class redisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){
        RedisTemplate<String,Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);

        //json序列号配置
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper obj= new ObjectMapper();
        obj.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        obj.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(obj);
        //String 序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        //key采用String的序列化方式
        template.setKeySerializer(stringRedisSerializer);
        template.setHashKeySerializer(stringRedisSerializer);
        //value采用jackson的序列化方式
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}

使用这个再次测试

    @Autowired
    @Qualifier("redisTemplate")
    private RedisTemplate redisTemplate;

    @RequestMapping("/v1/redis")
    public void test(){
        /**
         * redisTemplate操作不同的数据类型
         * opsForValue() 操作String类型
         * opsForHash() 操作Hash类型
         * opsForList() 操作List类型
         * opsForSet()  操作Set类型
         * opsForZSet() 操作ZSet类型
         * opsForGeo()  地图
         * opsForHyperLogLog() 基数统计
         */
        redisTemplate.opsForValue().set("name","zhao");
        System.out.println(redisTemplate.opsForValue().get("name"));
    }
}

结果如下图
在这里插入图片描述
4、一般企业开发会把redis的命令自己写一个ResultUtil工具类中,而不是直接使用 redisTemplate.opsForValue() 这种方式,如果想要ResultUtil这个工具类,自行百度即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值