一、redis介绍
1.1什么是redis?
redis是一款高性能的NOSQL(非关系型数据库)系列的非关系型数据库。
【关系型数据库和非关系型数据库的区别】
关系型数据库:
1.以数据库表的形式存储
2.数据之间有关系(一对多、多对多、多对一)
3.数据存储在硬盘上
关系型数据库:
1.resid的数据以键值对形式存储(key:value)
2.数据之间没有关系
3.数据存储在内存中
1.2为什么要使用redis?
操作大量关系型数据库时非常耗时,而利用缓存思想,利用redis做缓存来解决这个问题。
1.3缓存思路是什么?
从缓存中获取数据时,如果有数据,就直接返回数据,如果没有数据,就从数据库中获取数据,再将数据放入缓存。
二、redis下载安装
2.1下载
官网:https://redis.io
中文网:http://www.redis.net.cn/
2.2安装
解压直接可以使用:
* redis.windows.conf:配置文件
* redis-cli.exe:redis的客户端
* redis-server.exe:redis服务器端
先运行服务器端,再运行苦户端即可
三、命令操作
3.1 redis的数据结构
redis是以key:value的键值对形式存储数据,key都是字符串,而value有五种不同的存储形式:
- 字符串类型string
- 哈希类型(hash):map格式(key:value)
- 列表类型(list):linkedlist(无序可重复)
- 集合类型(set):(无序不可重复)
- 有序集合类型(sortedset):(有序不可重复)
3.2通用命令
1. keys * : 查询所有的键
2. type key : 获取键对应的value的类型
3. del key:删除指定的key value
四、redis的持久化
4.1什么是redis的持久化?
redis数据是存在内存中的,当redis服务器或者电脑重启时,内存中的数据就会被释放然后丢失,redis的持久化就是将内存中的数据保存在硬盘文件中。
4.2 redis的两种持久化机制
- RDB :不需要配置,redis默认就使用这种机制。在一定的时间间隔中检测kye的变化情况,然后持久化数据。
(1)编辑redis.windwos.conf文件
# after 900 sec (15 min) if at least 1 key changed //意思是在900秒内有1条数据发生变化就持久化数据
save 900 1
(2)启动redis服务器,并指定配置文件名称
D:\JavaWeb2018\day23_redis\资料\redis\windows-64\redis-2.8.9>redis-server.exe redis.windows.conf
//服务器启动程序 conf文件
启动成功后,当发生持久化时,会将内存中的数据存入到一个rdb格式的硬盘文件中。
- AOF:日志记录的方式,每一条数据发生变化就持久化数据,很影响性能,不推荐使用。
编辑redis.windwos.conf文件
appendonly no(关闭aof) --> appendonly yes (开启aof)
五、redis在JAVAWEB中的应用
- 缓存
从数据库查询数据时,需要从磁盘中引用数据,这个过程比较漫长,而从redis缓存中取数据时就比较快。
是否使用redis缓存技术一般考虑以下几个点:
1)业务数据是否常用(比如最典型的用户登录信息),不常用就没必要用redis,毕竟内存空间限制和成本比磁盘高。
2)如果写数据多于读数据,也没必要使用redis缓存。
3)如果存储数据量太大,会给缓存带来很大的压力,没有必要。 - 高速读写数据
在类似春运车票、商品秒杀等业务时,会有大量读取数据的业务请求,如果直接用数据库,很容易造成数据库瓶颈,甚至导致数据库和服务器瘫痪,所以可以使用redis缓存技术来做数据的高速读写。
先在缓存里做数据的高度读写,满足一定条件后(例如商品秒杀完后),将数据一次性持久化到数据库中。
六、NoSQL为什么不能代替数据库:
-
NoSQL是把数据存储在内存中,数据很容易丢失,持久化的功能也很有限,不如将数据存在磁盘中稳定。
-
NoSQL功能有限,无法像关系型数据库一样支持更为复杂的sql运算。
-
NoSQL的事务性、安全性、可靠性以及可扩展性不如关系型数据库强大。
参考:https://www.cnblogs.com/BigJunOba/p/9789682.html
七、Jedis和Spring Data Redis
Jedis是Redis官方推荐的Java连接开发工具。
Spring Data Redis是spring家族中的一员,是一个封装了Jedis的框架。
Spring Data Redis与Jedis的关系就是封装与被封装的关系。