Redis
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
),通常,
建议使用String
和Serializable
这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 属性来指定某个时间点的执行周期