Redis入门到实战(虎哥版)个人笔记-基础篇

一、安装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);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值