Redis

关于Redis

Redis是一款基于内存存储的、使用类似于Map结构的NoSQL数据库。

通常,在应用程序中,将使用Redis存储一些数据,并且,在程序的执行过程中,将优先从Redis中查询数据,以提高查询效率,
同时,也能减轻MySQL等数据库服务器的压力,甚至起到保护MySQL等数据库服务器的作用。

内存存储:Redis的数据都是存储在内存(RAM)中的,所以,读写效率非常高,由于是存储在内存中的,所以,断电后数据会全部丢失,
但是,Redis自身会处理持久化存储(自动的将内存中的数据也存储到硬盘上),所以,简单使用时,并不用担心重启、关机后Redis丢失数据的问题

类似Map结构:在Redis中存入的数据都要求自定义一个名称,类似于Map中的Key,具体存入的值就是对应的Value,甚至,当反复使用同一个Key存入数据时,
事实上是后续的存入覆盖前序的存入

NoSQL数据库:只要是能够存储数据、具有存取功能的,都可以称之为数据库,Redis与传统的关系型数据库不同,它并不会使用到SQL语句来操作数据,
只需要简单的读写即可,所以,一般称之为NoSQL数据库(其实,还有其它NoSQL数据库,与Redis完全不同,例如Elasticsearch等)

Redis的简单操作

登录Redis客户端:在终端输入redis-cli并执行即可

停止Redis服务:在登录Redis客户端后,执行shutdown

启动Redis服务:在终端执行redis-server,在Linux等操作系统,可以在此命令后添加 &(空格加&符号)避免窗口被独占

简单的测试Redis是否正常工作:在登录Redis客户端后,执行ping,正常情况下,将得到PONG回应

简单的存入数据: 在登录Redis客户端后,使用set K V的格式即可存入数据,例如:set name jack

简单的取出数据:在登录Redis客户端后,使用get K的格式即可取出数据,例如:get name,如果没有此K
对应的数据,则返回(nil),相当于Java中的null

查询Key:在登录Redis客户端后,使用keys命令可以查询Key,在此命令后,可以添加空格加星号,则表示查询所有Key,
例如:keys *,在keys命令的空格之后,可以使用星号作为通配符,但也可以不是直接使用星号,例如可以写成:keys p*
,则表示找出所有以p开头的Key

清空redis:在登录Redis客户端后,执行flushall即可清空Redis

Redis编程

在Spring Boot项目中,要实现Redis编程(通过程序读写Redis),需要添加依赖:spring-boot-starter-data-redis

Redis编程主要使用RedisTemplate工具类,此工具类是有2个泛型的类型的(类似于Map),通常,
建议使用StringSerializable这2个类型分别表示K和V的泛型类型。

关于Key的使用

在Redis中,各数据的Key都是一个自定义的“名称”,只存取一致,这个Key值是不影响基本使用的!

在开发实践中,由于需要存、取的数据可能较多,为了便于统一管理,这些Key值应该有一定的规律,通常,
建议把数据的类型作为Key中的必要部分,例如“品牌”数据的Key中就包含brand字样,“相册”数据的Key中就
包含album字样,如果对应的数据是列表,在Key中可以使用list字样,如果对应的只是此类型的若干数据中
的其中1个,在Key中可以使用item字样,且各项数据的Key中应该还包含数据id……

在Key中的多个单词,强烈建议使用冒号作为分隔符号,例如:

  • brand:list

  • brand:item:1

  • brand:item:2

  • album:list

  • album:item:8

关于Redis的应用场景

首先,Redis的特点:

  • 读写速度非常快
    • 相比MySQL等
  • 存在数据一致问题
    • 并不是每时每刻都与MySQL中的数据完全一样

所以,使用Redis的前提应该是:

  • 需要高速的、高频率的读(可能包含写)
  • 不太关注数据一致问题(偶尔不一致并不会带来严重后果)

关于ApplicationRunner

自定义组件类,实现ApplicationRunner,重写run()方法,此run()方法将在启动项目的末期自动执行。
通常用于实现: 启动项目是自动执行的任务

计划任务

自定义组件类,在类中定义方法,在方法上配置@Scheduled注解,并在配置类添加@EnableScheduling开启计划任务,
则添加了@Scheduled注解的方法会根据注解配置周期性的执行
@Scheduled注解常用属性
fixedRate = 5000: 则表示每间隔5秒执行一次(每次执行,在毫秒级上可能有误差)
fixedDelay = 5000:则表示每间隔5秒执行一次(距离上次执行后多久在执行下一次计划任务)
cron 属性来指定某个时间点的执行周期