当前位置:   article > 正文

SpringBoot整合Redis[详细版]

springboot整合redis

目录

一、简介

什么是Redis

为什么要使用Redis

二、复习 常用Redis类型

1、string类型

1.1、string类型的介绍

1.2、string类型数据的基本操作 

2、hash类型(常用)

2.1、hash类型的介绍

2.2、hash类型的基本操作

3、list类型

3.1、list类型的基本概念

3.2、list类型的基本操作

4、set类型

4.1、set类型的基本介绍

4.2、set类型数据的基本操作

5、sorted_set (zset)

5.1、sorted_set概念

5.2、sorted_set基本操作

三、SpringBoot整合Redis

 引入依赖

配置yaml

 RedisTemplate模版序列化配置

Redis的Demo案例


一、简介

什么是Redis

Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:

  • 基于内存运行,性能高效
  • 支持分布式,理论上可以无限扩展
  • key-value存储系统
  • 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

为什么要使用Redis

在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原因是因为那时候Web站点基本上访问和并发不高、交互也较少。而在后来,随着访问量的提升,使用关系型数据库的Web站点多多少少都开始在性能上出现了一些瓶颈,而瓶颈的源头一般是在磁盘的I/O上。而随着互联网技术的进一步发展,各种类型的应用层出不穷,这导致在当今云计算、大数据盛行的时代,对性能有了更多的需求,主要体现在以下四个方面:

  1. 低延迟的读写速度:应用快速地反应能极大地提升用户的满意度
  2. 支撑海量的数据和流量:对于搜索这样大型应用而言,需要利用PB级别的数据和能应对百万级的流量
  3. 大规模集群的管理:系统管理员希望分布式应用能更简单的部署和管理
  4. 庞大运营成本的考量:IT部门希望在硬件成本、软件成本和人力成本能够有大幅度地降低

为了克服这一问题,NoSQL应运而生,它同时具备了高性能、可扩展性强、高可用等优点,受到广泛开发人员和仓库管理人员的青睐。

二、复习 常用Redis类型

主要是springBoot对Redis的整合,所以在介绍类型使用的时候只展示增删改查。

  • string
  • hash
  • list
  • set
  • sorted_set

1、string类型

1.1、string类型的介绍

存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型

存储数据的格式:一个存储空间保存一个数据

存储内容:通常使用字符串,如果字符串以整形的形式展示,可作为数字操作使用

1.2、string类型数据的基本操作 

  •  添加/修改数据

                set  key  value

  • 获取数据

                get key

  • 删除

               del key  

2、hash类型(常用)

2.1、hash类型的介绍

新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息。

需要的存储结构:一个存储空间保存多个键值对数据

hash类型:底层使用哈希表结构实现数据存储

2.2、hash类型的基本操作

  • 添加/修改数据 

                 hset  key   field  value

                        eg:hset   user  name zhansgan

                        eg:hset  user   age  38

  • 获取数据

                hget    key    field

  • 删除数据

                hdel    key    field1 [field2]  (可以删除多个field)

                        eg: hdel  user   name  age

3、list类型

3.1、list类型的基本概念

数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分。

需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序。

list类型:保存多个数据,底层使用双向链表存储结构实现。

3.2、list类型的基本操作

  • 添加/修改数据 

                 lpush   key   value1 [value2] (从左到右存储)

                        eg:lpush  name  zhangsan lisi  wangwu

                 rpush  key   value1 [value2] (从右往左存储)

                       eg:rpush  name  zhangsan lisi  wangwu

  • 获取数据

                lrange   key    start stop  下标从几到几  -1表示最后一个

                        eg:  lrange  name  0 -1

  • 获取并移除数据

                lpop  key 

                        eg:lpop name (获取并移除第一个数据)

                rpop  key 

                        eg:rpop name (获取并移除最后一个数据)

  • 删除数据

                lrem   key    count   value  (在一个key中从左边开始删除几个这样的值)                     

4、set类型

4.1、set类型的基本介绍

新的存储需求:存储大量的数据,在查询方面提供更高的效率

需要的存储结构:能够保证大量的数据,高效的内部存储机制,便于查询。

set类型:与hash存储结构完全相同,仅存储键,不存储值,并且键是不允许重复的。 

 

4.2、set类型数据的基本操作

  • 添加数据 

                 sadd  key   member1  [member2]

                        eg:sadd  users zhansgan  lisi

                        eg:sadd  users    wangwu

  • 获取数据

                smembers key 

  • 删除数据

                srem  key    member1 [member2]  (可以删除多个field)

                        eg: srem users zhangsan 

5、sorted_set (zset)

5.1、sorted_set概念

新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式

需要的存储结构:新的存储模型,可以保存可排序的数据

sorted_set类型:在se的存储结构基础上添加可排序字段

5.2、sorted_set基本操作

  • 添加数据 

                 zadd  key  scorel   member1  [ scorel member2]

                        eg:sadd  users 19 lisi 

                 

  • 获取全部数据

                zrange   key start stop [WITHSCORES]

                        eg:  zrange users 0 -1(从小到大获取数据的的属性)

                        eg: zrange users 0 -1 withscores(从小到大获取数据的编号和属性)

                zrevrange  key start stop [WITHSCORES]

                         eg:  zrevrange users 0 -1(从大到小获取数据的的属性)

                        eg:  zrevrange users 0 -1  withscores(从大到小获取数据的的属性和编号)

  • 删除数据

                zrem  key    member1 [member2] 

                        eg: zrem users lisi

三、SpringBoot整合Redis

SpringBoot版本:     2.3.4.RELEASE

 引入依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>
  5. <!-- spring2.X集成redis所需common-pool2-->
  6. <dependency>
  7. <groupId>org.apache.commons</groupId>
  8. <artifactId>commons-pool2</artifactId>
  9. <version>2.6.0</version>
  10. </dependency>

配置yaml

  1. spring:
  2. redis:
  3. host: 自己的ip
  4. port: 自己的端口号 默认 6379
  5. #Redis使用的数据库
  6. database: 0
  7. #连接超时事件毫秒
  8. timeout: 18000
  9. lettuce:
  10. pool:
  11. #连接池最大连接数
  12. max-active: 20
  13. #最大阻塞等待时间
  14. max-idle: 5
  15. #连接池最小空闲连接
  16. min-idle: 0

 RedisTemplate模版序列化配置

在不使用序列化配置之前Java数据序列化底层使用的是默认序列化存入Redis中是解析过乱码的数据,存到Redis中可视化太低!使用之后可以显示中文

  1. import org.springframework.context.annotation.Bean;
  2. import org.springframework.context.annotation.Configuration;
  3. import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
  4. import org.springframework.data.redis.core.RedisTemplate;
  5. import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
  6. import org.springframework.data.redis.serializer.StringRedisSerializer;
  7. @Configuration
  8. public class RedisConfig {
  9. /**
  10. * redis序列化的工具配置类,下面这个请一定开启配置
  11. * 127.0.0.1:6379 keys *
  12. * 1)"ord:102" 序列化过
  13. * 2)"\xac\xed\x00\x05t\ord:102" 没有序列化过
  14. * this.redisTemplate.opsForValue()//提供了操作String类型的所有方法
  15. * this.redisTemplate.opsForList()//提供了操作List类型的所有方法
  16. * this.redisTemplate.opsForSet()//提供了操作Set类型的所有方法
  17. * this.redisTemplate.opsForHash()//提供了操作Hash类型的所有方法
  18. * this.redisTemplate.opsForZSet()//提供了操作ZSet类型的所有方法
  19. *
  20. *
  21. * @param lettuceConnectionFactory
  22. * @return
  23. */
  24. @Bean
  25. public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory){
  26. RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
  27. redisTemplate.setConnectionFactory(lettuceConnectionFactory);
  28. //设置key序列化方式String
  29. redisTemplate.setKeySerializer(new StringRedisSerializer());
  30. //设置value的序列化方式json,使用GenericJackson2JsonRedisSerializer替换默认的序列化
  31. redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
  32. redisTemplate.setHashKeySerializer(new StringRedisSerializer());
  33. redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
  34. redisTemplate.afterPropertiesSet();
  35. return redisTemplate;
  36. }
  37. }

 下面图片就是上述代码,请忽略!

在SpringBoot中集成了两个模版一个是 RedisTemplate,另一个为 StringRedisTemplate 

而虽然StringRedisTempate帮助我们做了序列化,但是存储数据的时候只能存储Sting类型的数据,而RedisTemplate可以存储Object类型,所以我们一个使用RedisTemplate比较多一些!

Redis的Demo案例

  1. @SpringBootTest
  2. public class RedisTest {
  3. /**
  4. * redis序列化的工具配置类,下面这个请一定开启配置
  5. * 127.0.0.1:6379 keys *
  6. * 1)"ord:102" 序列化过
  7. * 2)"\xac\xed\x00\x05t\ord:102" 没有序列化过
  8. * this.redisTemplate.opsForValue()//提供了操作String类型的所有方法
  9. * this.redisTemplate.opsForList()//提供了操作List类型的所有方法
  10. * this.redisTemplate.opsForSet()//提供了操作Set类型的所有方法
  11. * this.redisTemplate.opsForHash()//提供了操作Hash类型的所有方法
  12. * this.redisTemplate.opsForZSet()//提供了操作ZSet类型的所有方法
  13. *
  14. *
  15. * @param lettuceConnectionFactory
  16. * @return
  17. */
  18. @Autowired
  19. RedisTemplate redisTemplate;
  20. @Test
  21. public void test1(){
  22. //boundhashOps也是操作redis的一种方法,但是是低版本操作。
  23. //操作方式和opsForhash一样。根据个人喜好都可以
  24. Object content = redisTemplate.boundHashOps("content").get("1");
  25. System.out.println(content);
  26. }
  27. /**
  28. 存储string类型
  29. */
  30. @Test
  31. public void test2(){
  32. /**
  33. * redisTemplate.opsForValue()//提供了操作String类型的所有方法
  34. */
  35. Object name ="dession";
  36. redisTemplate.opsForValue().set("name",name);
  37. //设置过期时间1天过期
  38. redisTemplate.expire("name",1, TimeUnit.DAYS);
  39. System.out.println(redisTemplate.opsForValue().get("name"));
  40. // 结果为:dession
  41. }
  42. /**
  43. 存储Hash数据类型
  44. */
  45. @Test
  46. public void test3(){
  47. //单个存储
  48. redisTemplate.opsForHash().put("users","name","zhangsan");
  49. //设置过期时间
  50. redisTemplate.expire("users",1, TimeUnit.DAYS);
  51. //多只存储
  52. Map map = new HashMap();
  53. map.put("age",12);
  54. map.put("sex","男");
  55. redisTemplate.opsForHash().putAll("users",map);
  56. Object o = redisTemplate.opsForHash().get("users", "name");
  57. System.out.println(o);
  58. }
  59. }

 好啦,以上是我操作两个最最最常用的数据类型的方式来进行的案例讲解,还有其中还有很多方法不能一一列举出来,剩下的任务传递给你,认真探索一下redis的奥秘吧!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/152119
推荐阅读
相关标签
  

闽ICP备14008679号