Redis简单介绍:
Redis是一个使用c语言开发的数据库,它的数据是存在内存中的,读写速度很快,因此被广泛的应用于缓存方面。
redis特点:
1.redis支持key-value、list、set、zset、hash等数据结构的存储。
2.redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候再次加载进行使用。
3.Redis有灾难恢复机制。因为可以把缓存中的数据持久化到磁盘上。
4.redis同时使用了惰性删除与定期删除。
5.redis支持发布订阅模型、lua脚本、事务等功能。
6.redis有原生的集群模式。
如果添加了缓存,则用户在进行请求时,是先在缓存中找是否存在有对应的数据,如果缓存中存在数据就直接返回给用户,如果缓存中没有,则在数据库中查找,如果数据库中存在,就把数据更新到缓存中,如果数据库中也没有对应的数据,那么就返回空数据。
为什么要使用缓存?
高性能:因为访问数据库中的数据时,因为是从硬盘中读取的,过程会较慢。如果用户经常要访问这个数据,就比如抖音视频的点赞数,可能会在短时间内不断增加,这时就要先存到缓存中。
使用缓存可以使用户在第二次访问这些数据的时候就直接操作内存获取了,速度较快。
高并发:redis的QPS大约是Mysql的10-100倍(QPS:服务器每秒可以查询的次数),所以redis很读写性能较优越。
直接操作缓存能够承受的数据库请求数量是远大于直接访问数据库的,提高了系统整体的并发性。
redis的常见的数据结构及命令操作:
springboot中使用redis
springBoot中对很多Nosql数据库都提供了自动化配置的支持,其中就有redis.
springBoot提供了对缓存功能的抽象,即允许绑定不同的缓存解决方案(如 ehcache、redis…)。但本身不直接提供缓存功能的实现,它支持注解方式使用缓存。
RedisTemplate是Spring中用于操作Redis的工具类。
1.导入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
2.配置application.yml
redis:
#数据库索引
database: 7
host: 127.0.0.1
port: 6379
password:
#连接超时时间(ms)
timeout: 5000
# 自定义redis默认过期时间(单位:时)
expire-time: 24
jedis:
pool:
# 连接池最大连接数(使用负值表示没有限制)
max-active: -1
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1
redis默认密码是空。
3.添加缓存注解。
@CacheConfig
是一个类级别的注解,允许共享缓存的名称。
一个类可能会有多个缓存操作而这些缓存操作可能是重复的,这时候可以使用@CacheConfig.
@Cacheable:
是标记方法或类上的,标识该方法支持缓存,Spring调用注解标识方法后会将返回值缓存到redis中。
主要参数:
value : 缓存的名称,在spring配置中定义,必须指定至少一个。
key: 缓存的key,可以为空,如果指定要按照spel表达式编写,如果不指定,则缺省按照方法的所有参数进行组合。
condition: 缓存的条件,可以为空,使用spek编写,返回true或false,只有为true使才进行缓存。
如果在类上配置了@CacheConfig,那么此时@Cacheable中的value就会取代@CacheConfig中cacheNames,如上。
如果在类上配置了@CacheConfig(cacheNames = " "),在该类下的@Cacheable中可以不用配置value.
默认key生成:
如果没有参数,则使用0作为key;
如果只有一个参数,使用该参数作为key;
如果有多个参数,使用包含所有参数的hashCode作为key
@CacheEvict
标记在方法上,方法执行完毕之后根据条件或key删除对于的缓存。
主要参数:
allEntries : 布尔类型 表示是否需要清除缓存中的所有元素。
key: 需要删除的缓存的key
当我们在更新数据库的数据时,要使用@CacheEvict,需要把redis的缓存清空,否则查询的数据就是redis缓存中的数据,这样就会导致数据库和缓存数据不一致的问题。(页面不能及时的同步更新后的数据)。
加上@CacehEvict 就会在查询数据时发现数据时最新的,与数据库保持一致.
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦