liujiusheng / blog

个人博客,blog
19 stars 0 forks source link

Spring boot 的Redis非官方文档 #217

Open liujiusheng opened 2 years ago

liujiusheng commented 2 years ago

网上多数时候都是用的这个包,它是spring data体系下的一个包:spring-data-redis

官方文档地址:https://spring.io/projects/spring-data-redis

redis下面也是有多个库的,默认是初始化为16个库,可以自己改配置形成多个库。 image

虽然有多个库,但所有的数据都存放在一个dump.rdb的文件中。

一个库中也可以分组存放不同的东西。采用:号表示,如下在db0中既创建了key为a的一个键值对,又创建了一个以a为分组的a:b为键的值。这个冒号可以在后面无限跟,但它只是用于分组。在查询的时候还是要以完整的key值才能取到值。

通过命令行连接的命令:

redsi-cli -h 192.168.1.123 -p 6379 -a 222

连接后默认在db0中。

查看当前库所有key:

keys *

添加或修改key值:

set key value

根据key值获取值:

get key

如果不做特殊处理的话,写入值时key和value的前面会自动被加一个特殊的16进制字符:\xAC\xED\x00\x05t\x00\x08

由于字符串对不上,也会导致取值的时候取不到对应的key。

这是由于这个组件默认使用的JdkSerializationRedisSerializer这个函数初始化,而这个初始化是用于存放JAVA对象的,所以我们需要自己初始化成自己需要的类型。

网上说StringRedisTemplate类可以直接操作字符,但是我没有试成功。

image

正确的用法是先用setKeySerializer和setValueSerializer函数初始化:

RedisSerializer stringSerializer = new StringRedisSerializer();
ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
valueOperations.set("password", "1234");

如果是Hash类型的数据还要确保同时有以下几行代码才不会出现乱码:

RedisSerializer stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);

以下写法会生成一个JAVA内存中的缓存,经测试可以取到数据。

Object value = redisTemplate.opsForValue().get("a");

Hash类型的可以直接用opsForHash函数取到值:

Object value = redisTemplate.opsForHash().get("hashtest","223");
return JSON.toJSONString(value);

如果要读取字符串中的值就需要另一个函数boundValueOps,取值:

Object value = redisTemplate.boundValueOps("liu").get();

设置值:

redisTemplate.boundValueOps("liu").set("222");

暂时还没搞懂opsForValue方法和boundValueOps方法的区别。

Redis默认支持:Hash、值、List、Set、Map几种类型,使用最多的是Hash类型。

为Redis设置密码(部分场景必须要设置密码后才能连接):

为现有的redis创建密码或修改密码的方法:

1.进入redis的容器 docker exec -it 容器ID bash

2.进入redis目录 /usr/local/bin

3.运行命令:redis-cli

4.查看现有的redis密码:config get requirepass

5.设置redis密码config set requirepass 为你要设置的密码)

6.若出现(error) NOAUTH Authentication required.错误,则使用 auth 密码 来认证密码

直接从镜像启动redis并带密码:

docker run -d --restart=always --name test-redis -p 6380:6379 redis --requirepass "222" --appendonly yes