一文搞定非关系型数据库—Redis
课工场 | 2021-09-09 16:28:08  144 浏览

背景介绍

话说在互联网发展的早期,那还是一个各路军阀混战,实战为王的时代,没有所谓正规军,搞定问题才是王道;


当然,那个时期也没有那么多问题,毕竟这个时期,互联网还是个新鲜的词汇,能被称作是网民的人也都是稀有物种,上网多半是大户人家才玩的起的高端奢侈品。


从技术的角度来看,此时还处在Web应用发展的初期互联网技术架构还是最原始的单体架构,因为此时的网民数量还是很少,一个服务器完全足够扛起用户的访问的压力。


这个时期的关系型数据库得到了较为广泛的关注和应用,网站访问量谈不上什么高并发、更别说什么用户体验了,能玩的起就已经是完胜上亿中国人了。



不过现在,中国的互联网发展已经是发生了天翻地覆的变化,也早已经不是当年那个“吴下阿蒙”,在如今这个不提三高(高并发、高可用、高性能)都不好意思说自己是个程序猿的时代。


单纯的依靠关系型数据库已经无法满足的我们的业务需求了,更何况当今在云计算、大数据、人工智能盛行的时代,对技术的需求也更加的多元化;现在网络上每天都会产生庞大的数据,这些数据有很大一部分是由关系型数据库来处理,其严谨成熟的数学理论基础使得数据建模和应用程序编程更加简单。


然而,由于数据量级很大而且包含有大量的规律的数据,而我们如果想要更好利用这些数据,对数据的处理和存储的重要性也越来越高,如果还仅仅依赖关系型数据库显然是不太现实的;所以,此时非关系型数据库(NoSQL)就应运而生了(好像所有技术都这么来的,技术诞生通常是为了要解决某些业务),先来看看什么是非关系型数据库

非关系型数据库(NoSQL)

所谓非关系型数据库,其实是相对于关系型数据库而说的,我们都知道关系型数据库通常都是处理一些结构化的数据,这些数据通常都是有某些对应关系; 而非关系型数据库(NoSQL)通常用于存储那些类型不固定的,也没有什么规律的数据,现在的企业每天都产生大量的数据过程中,非关系型数据库的应用非常广泛,应用场景也非常多,比如:缓存等,目前比较常用的非关系型数据库有

  • Redis

  • Memcache

  • MongoDb

  • HBase

今天咱们就先来了解其中一个非常优秀用的也非常多的非关系型数据库-Redis

非关系型数据库之Redis

提到Redis可谓是无人不知无人不晓,当然是在程序猿这个可爱的群体中;不管你是从事Python、Java、Go,还是世界上最好的语言PHP开发,Redis都应该是一个比较熟悉的中间件产品。Redis是一个 Key-Value 存储结构,它支持存储的 value 类型非常丰富:

  • string(字符串)

  • hash(哈希)

  • list(列表)

  • set(无序集合)

  • zset(sorted set:有序集合)

在Java开发过程中Redis的应用场景也非常多,比如:缓存、秒杀、分布式锁等;接下来咱么就来一睹Redis芳容

Redis实战篇

俗话说好:"光说不练假把式,光练不说傻把式,连说带练全把式",所以接下来,咱们就连说代练的实操一把

开发环境介绍

首先介绍一下我们的开发环境,这里咱么是基于Java语言使用IDEA做为开发工具,使用Spring Boot来集成Redis

Redis的安装内容,大家可以按照自己的习惯使用Windows版、Linux版本都可以。

使用Spring Data Redis操作Redis

Java中操作Redis的方案很多,我们使用目前最主流的 Spring Boot Redis,从名称上我们就可以看出来,这又是Spring对操作Redis的客户端的封装,没错Spring就是这么优秀;我们知道在Spring Boot中默认集成的就是 Spring Data Redis,它提供了 针对 Redis 提供了非常方便的操作模板类 RedisTemplate ;那么接下来我们就来看看 Spring Boot 中 Spring Data Redis 的具体用法。


Tips:

在spring中凡是以XxxTemplate命名的类,都是Spring提供的操作xxx的模板类

如:RedisTemplate 就是操作Redis的模板类

创建项目工程

使用Spring Initializr创建Spring Boot 基础工程,引入 Redis 依赖有两种方式:

  1. 直接在pom文件中加入redis依赖

  • <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

  1. 在创建项目的时候直接勾选Spring Boot Redis


添加Redis配置信息

在application.properties中添加redis的相关配置信息

#redis
# redis默认的0号数据库(共16个)
spring.redis.database=0
spring.redis.host=192.168.25.136
spring.redis.port=6379
spring.redis.password=root@234
#连接池最大连接数
spring.redis.jedis.pool.max-active=8
#连接池最大空闲连接数
spring.redis.jedis.pool.max-idle=8
#连接池最小空闲连接数
spring.redis.jedis.pool.min-idle=0

实战操作

接下来咱么来编写一个测试类,存储一个字符串类型的数据,并且取出来验证是否存储成功

@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class DemoApplicationTests {

@Autowired
private RedisTemplate redisTemplate;

@Test
public void testRedis() {
//操作字符串
ValueOperations opsForValue = redisTemplate.opsForValue();
// 存储 数据
opsForValue.set("kgc", "kegongchang");
// 取出存储的数据
System.out.println("取出存储的数据:" + opsForValue.get("kgc"));
}
}

RedisTemplate模板类提供了对5种数据结构操作的方法,其他的数据类型大家感兴趣可以自己去试下,使用方式都是一样的

  • redisTemplate.opsForValue() 操作string

  • redisTemplate.opsForHash() 操作hash

  • redisTemplate.opsForList() 操作list

  • redisTemplate.opsForSet() 操作set

  • redisTemplate.opsForZSet() 操作有序set

我看下测试结果如下:

我们从redis中取出的数据和存储的数据是一样的,说明我们在spring中使用Spring Data Redis是成功的,是不是很简单呢,马上动手练练吧




标签: