Open liujiusheng opened 2 years ago
网上多数时候都是用的这个包,它是spring data体系下的一个包:spring-data-redis
官方文档地址:https://spring.io/projects/spring-data-redis
redis下面也是有多个库的,默认是初始化为16个库,可以自己改配置形成多个库。
虽然有多个库,但所有的数据都存放在一个dump.rdb的文件中。
dump.rdb
一个库中也可以分组存放不同的东西。采用:号表示,如下在db0中既创建了key为a的一个键值对,又创建了一个以a为分组的a:b为键的值。这个冒号可以在后面无限跟,但它只是用于分组。在查询的时候还是要以完整的key值才能取到值。
:
db0
a
a:b
通过命令行连接的命令:
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
\xAC\xED\x00\x05t\x00\x08
由于字符串对不上,也会导致取值的时候取不到对应的key。
这是由于这个组件默认使用的JdkSerializationRedisSerializer这个函数初始化,而这个初始化是用于存放JAVA对象的,所以我们需要自己初始化成自己需要的类型。
网上说StringRedisTemplate类可以直接操作字符,但是我没有试成功。
正确的用法是先用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创建密码或修改密码的方法:
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 密码 来认证密码
docker run -d --restart=always --name test-redis -p 6380:6379 redis --requirepass "222" --appendonly yes
网上多数时候都是用的这个包,它是spring data体系下的一个包:spring-data-redis
官方文档地址:https://spring.io/projects/spring-data-redis
redis下面也是有多个库的,默认是初始化为16个库,可以自己改配置形成多个库。
虽然有多个库,但所有的数据都存放在一个
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类可以直接操作字符,但是我没有试成功。
正确的用法是先用setKeySerializer和setValueSerializer函数初始化:
如果是Hash类型的数据还要确保同时有以下几行代码才不会出现乱码:
以下写法会生成一个JAVA内存中的缓存,经测试可以取到数据。
Object value = redisTemplate.opsForValue().get("a");
Hash类型的可以直接用opsForHash函数取到值:
如果要读取字符串中的值就需要另一个函数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