NoSQL数据库
,重点关注数据存储格式,是key-value格式,也就是键值对的存储形式。与MySQL数据库不同,MySQL数据库有表、有字段、有记录,Redis没有这些东西,就是一个名称对应一个值,并且数据以存储在内存中使用为主。什么叫以存储在内存中为主?其实Redis有它的数据持久化方案,分别是RDB和AOF,但是Redis自身并不是为了数据持久化而生的,主要是在内存中保存数据,加速数据访问的,所以说是一款内存级数据库。Redis安装包分为 Windows 版和 Linux 版:
下载的安装包有两种形式,一种是一键安装的msi文件,还有一种是解压缩就能使用的zip文件,哪种形式都行。
Redis的Windows版属于绿色软件,直接解压zip文件即可使用,解压后目录结构如下:
用法说明:
set name tom =》表示 设置 键名为name的值为tom,这里的name就是key的名称(键名)
get name =》表示 获取 键名为name的值
setex age 60 100 =》表示 设置 键名为age的值为100,并把age的过期时间设置为60秒。(从创建完成后开始计时60秒,之后该键名的值就会失效。
setnx month 12 =》当month键名不存在时,表示设置month的值为12,当month键名已经存在时,命令失效,无法设置成功。
用法说明:
hset 1 name zhangsan
=》表示 设置 key为1的哈希表,key里面filed的值为name,filed对应的值为zhangsan(可以把filed看成属性,然后把value看成属性值)
hget 1 name
=》表示 获取 存储在key为1的哈希表里面的字段为name的值
hdel 1 name
=》表示删除存储在key为1的哈希表中里面的字段名为name的字段
hkeys 1
=》表示获取key为1的哈希表的所有字段
hvals 1
=》表示获取key为1的哈希表里面的所有字段的值
Redis 的 Java 客户端很多,常用的几种:
Spring Data Redis 是 Spring 的一部分,对 Redis 底层开发包进行了高度封装。
在 Spring 项目中,可以使用Spring Data Redis来简化操作。
步骤①:导入springboot整合redis的starter坐标
上述坐标可以在创建模块的时候通过勾选的形式进行选择,归属NoSQL分类中
步骤②:进行基础配置
spring:
redis:
host: localhost
port: 6379
database: 10 # database是指定使用redis里面的哪个数据库(默认用的是0数据库)
操作redis,最基本的信息就是操作哪一台redis服务器,所以服务器地址属于基础配置信息,不可缺少。但是即便你不配置,目前也是可以用的。因为以上两组信息都有默认配置,刚好就是上述配置值。
步骤③:使用springboot整合redis的专用客户端接口操作,此处使用的是RedisTemplate
可以选择创建redis对象:(在里面可以添加一些操作)
@Configuration
@Slf4j //日志的注解,有它下面的log.info才能使用
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
log.info("开始创建redis模板类...");
RedisTemplate redisTemplate = new RedisTemplate();
// 设置Key的序列化器,默认为JdkSerializationRedisSerializer
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
}
测试类:注意,测试类的位置要和引导类处于同一目录下(一般用idea的Spring Initializr创建的测试环境自动给你建立好目录的,但是如果是使用maven自己导入依赖实现的springboot项目,写测试类的时候则需要建立和引导类所处的目录结构,或者在@SpringbootTest()注解里面指定引导类)
注意操作redis之前,记得启动redis。
@SpringBootTest
class SpringbootRedisApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void set() {
ValueOperations ops = redisTemplate.opsForValue();
ops.set("age",41);
}
@Test
void get() {
ValueOperations ops = redisTemplate.opsForValue();
Object age = ops.get("name");
System.out.println(age);
}
@Test
void hset() {
HashOperations ops = redisTemplate.opsForHash();
ops.put("info","b","bb");
}
@Test
void hget() {
HashOperations ops = redisTemplate.opsForHash();
Object val = ops.get("info", "b");
System.out.println(val);
}
}
在操作redis时,需要先确认操作何种数据,根据数据种类得到操作接口。例如使用opsForValue()获取string类型的数据操作接口,使用opsForHash()获取hash类型的数据操作接口,剩下的就是调用对应api操作了。各种类型的数据操作接口如下:
由于redis内部不提供java对象的存储格式,因此当操作的数据以对象的形式存在时,会进行转码,转换成字符串格式后进行操作。为了方便开发者使用基于字符串为数据的操作,springboot整合redis时提供了专用的API接口StringRedisTemplate,你可以理解为这是RedisTemplate的一种指定数据泛型的操作API。
@SpringBootTest
public class StringRedisTemplateTest {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void get(){
ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
String name = ops.get("name");
System.out.println(name);
}
}
Spring Boot默认使用的Redis客户端是Lettuce。Lettuce是一个高性能的异步Redis客户端,它基于Netty框架实现了高效的异步通信。它支持连接池和集群模式,并提供了丰富的功能和灵活的配置选项。
切换成jedis客户端技术操作步骤如下:
步骤①:导入jedis坐标
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
edis坐标受springboot管理,无需提供版本号
步骤②:配置客户端技术类型,设置为jedis
spring:
redis:
host: localhost
port: 6379
client-type: jedis