Redis

Redis

什么是缓存

缓存是一种临时存储数据的技术,用于加快数据访问速度和减少对原始数据源的访问次数
Redis是目前最流行的一个开源的内存数据库

Redis优点

  • key-value结构存储
  • 基于内存存储,读写性能高
  • 基于C语言编写,可以达到100000+的QPS(每秒内查询次数)
  • 结构化的NoSql数据库。NoSql(Not Only SQL)
  • 常见的NoSql数据库:Redis、MongoDB

Redis的环境准备

Redis概述

Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。

官网:https://redis.io

中文网:https://www.redis.net.cn/

下载与安装

Redis安装包分为windows版和Linux版:

Windows版下载地址:https://github.com/microsoftarchive/redis/releases

Redis的Windows版属于绿色软件,直接解压即可使用

Redis及可视化软件的详细下载和安装步骤链接:
https://blog.csdn.net/yrc1314/article/details/143085198?spm=1001.2014.3001.5501

Redis的常见数据类型及命令

概述

Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:

字符串(string)

Redis命令参考地址,Redis中文网:https://www.redis.net.cn

Redis 中字符串类型常用命令:

  • set key(同一个key),后执行的会覆盖之前的数据
    del key 删除key的数据,这个是通用的命令,不仅仅只是在字符串中适用
  • setnx与set在存储数据的时候,set可以覆盖之前的数据,sexnx则不行(适用于对数据进行加锁)

哈希(hash)

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。

Redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象

数据特点

列表(list)

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索,特征也与LinkedList类似:有序、元素可以重复、插入和删除快、查询速度一般

集合(set)

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征: 无序、元素不可重复、查找快、支持交集、并集等功能

通用命令

Redis的通用命令是不分数据类型的,都可以使用的命令:

Java中操作Redis

Redis的Java客户端

前面讲解的Redis的常用命令,这些命令是我们操作Redis的基础,如果先要在Java中操作Redis,就需要使用Redis的Java客户端,就如同我们使用JDBC操作MySQL数据库一样。

Redis 的 Java 客户端很多,常用的几种:

  • Jedis
  • Lettuce
  • Spring Data Redis

Spring Data Redis

Spring Data Redis 是 Spring 的一部分,提供了在 Spring 应用中通过简单的配置就可以访问 Redis 服务,对 Redis 底层开发包进行了高度封装。在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作。

网址:https://spring.io/projects/spring-data-redis

Spring Data Redis中提供了一个高度封装的类:RedisTemplate,对相关api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

SpringDateRedis的详情操作:
https://blog.csdn.net/yrc1314/article/details/143085354?spm=1001.2014.3001.5502

Spring Cache

概述

Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。

Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如:

  • EHCache
  • Caffeine
  • Redis(常用)

集成环境

准备一个Springboot项目

导入Redis和SpringCache依赖

添加配置支持

常见注解

主要使用注解来管理缓存

注解-@Cacheable

在方法执行前,spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中,查询的时候使用

java 复制代码
@Cacheable(cacheNames = "userCache",key="#id")
	public User getById(Long id){    
		User user = userMapper.getById(id);    
		if(user == null){        
		throw new RuntimeException("用户不存在");    
		}    
		return user;}
  • cacheNames = "userCache" : 表示命名空间,key的第一层级
  • key="#id" : id指的是查询的参数, 也就是使用id属性作为key
  • 在Redis中,冒号通常用作键的命名约定,可以创建层次结构,类似于文件系统中的路径结构,提升查找效率

对象序列化

对象序列化是将对象转换为可存储或传输的字节序列的过程,方便在需要时可以重新创建对象。这种序列化后的字节序列可以保存在文件,数据库或通过网络进行传输。

注解-@Cacheable

如果是条件查询,则可以使用多条件的转换为hashCode来作为缓存的key

注解-@CachePut

作用: 将方法返回值,放入缓存,一般保存的时候使用该注解

java 复制代码
@CachePut(value = "userCache", key = "#user.id")//key的生成:userCache::1
public User insert(User user){    
	userMapper.insert(user);    
	return user;
}

#user.id : #user指的是方法形参的名称, id指的是user的id属性 , 也就是使用user的id属性作为key

注解-@CacheEvict注解

作用: 清理指定缓存

注解-@Caching

作用: 组装其他缓存注解

  • cacheable 组装一个或多个@Cacheable注解
  • put 组装一个或多个@CachePut注解
  • evict 组装一个或多个@CacheEvict注解
相关推荐
独行soc1 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain1 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship1 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站1 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶1 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
梦想平凡3 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
TianyaOAO3 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
fpcc3 小时前
跟我学c++中级篇——C++中的缓存利用
c++·缓存
Ewen Seong3 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
安全二次方security²3 小时前
SMMU软件指南SMMU编程之虚拟机结构和缓存
缓存·cache·smmu·arm安全架构·系统mmu·虚拟机结构·vms