一、安装redis(docker方式)
1.下载redis镜像
2.使用命令 docker run -d --name redis -p 6379:6379 redis 创建并运行redis容器,使用命令 docker ps 查看正在运行的容器
3.使用命令 docker exec -it redis bash 进入容器内部
4.使用命令 redis-cli -h 虚拟机地址 -p 6379 可连接上redis,进而使用命令行操作redis
5.使用ping检查一下是否连接成功
二、常用命令
1.通用命令
2.string命令
3.hash命令
4.list命令
5.set命令
6.sortedset
三、redis客户端
像jedis、springdata的api就不说了,重点说一下它的序列化问题。造成序列化问题的原因是因为在redis中使用了一个默认的jdk序列化器,这个jdk序列化器会将object序列化为字节形式,就会一串字节码。
解决的方法:自定义RedisTemplate的序列化方式即可。
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory)
{
//创建redisTemplate对象
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
//设置连接工厂
redisTemplate.setConnectionFactory(connectionFactory);
//创建序列化对象
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
//设置key的序列化方式
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
//设置value的序列化方式
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
//返回
return redisTemplate;
}
还有一个问题,就是在用上面说的自定义序列化,在将对象序列化到redis中时,也会把该对象的全类名序列下来。在大型项目中,这会造成内存巨大的消耗!因此,可以使用StringRedisTemplate解决这个问题。
StringRedisTemplate默认存入的key和value都是string类型,因此,我们在存入对象的时候,需要手动序列化对象;而在取出对象的时候,手动反序列化对象。这样就能解决上述问题。至于序列化和反序列化的工具,可以使用alibaba的fastjson工具。
void testSaveUser() {
User user = new User("大虎哥", 18);
//手动序列化user对象
stringRedisTemplate.opsForValue().set("user", JSON.toJSONString(user));
//获取数据
String userJson = stringRedisTemplate.opsForValue().get("user");
User user1 = JSON.parseObject(userJson, User.class);
System.out.println("user1 = " + user1);
}