Redis自学经历

    hello,本人ZH,最近读了《redis in action》这本书,对于redis有些初步了解,和大家分享一下。

    公司一直在举办读书分享会,自建小组,每周轮流分享,ZH和同事就选择了《redis in action》这本书阅读,让我真正认识了redis,百度官方对redis的定义是:

    Redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

简单理解就是Redis是一个非关系型数据库,具有丰富的数据结构,可持久化,支持主从复制和集群等高级功能。

一. Spring Boot 中使用redis

1. 配置文件配置redis连接,在Service中直接@Autowired自动注入RedisTemplate

RedisTemplate和StringRedisTemplate的区别

(1)两者的关系是StringRedisTemplate继承RedisTemplate。
(2)两者的数据是不共通的,StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
(3)SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate使用的序列类在在操作数据的时候,比如说存入数据会将数据先序列化成字节数组然后在存Redis数据库,这个时候打开Redis查看的时候,数据不是以可读的形式展现的,而是以字节数组显示

2.  excute()与opsFor区别

(1)execute() 需要 RedisConnection 对象,通过 RedisConnection 操作 Redis 被称为低级抽象(Low-Level Abstractions)
(2)opsFor 之类的被称为高级抽象(High-Level Abstractions),是为了提供更友好的模板类,底层还是调用的 execute(),需要 RedisConnection 对象。所以我觉得 opsFor 就是对 execute() 的进一步封装。

3. PipeLine(管道)的总结

Redis是采用基于C/S模式的请求/响应协议的TCP服务器。
           性能问题一:redis客户端发送多条请求,后面的请求需要等待前面的请求处理完后,才能进行处理,而且每个请求都存在往返时间RRT(Round Trip Time),即使redis性能极高,当数据量足够大,也会极大影响性能,还可能会引起其他意外情况。
           性能问题二:性能问题一,我们可以通过scan命令来解决,如何来设置count又是一个问题,设置不好,同样会有大量请求存在,即使设置到1w(推荐最大值),如果扫描的数据量太大,这个问题同样不能避免。每个请求都会经历三次握手、四次挥手,在处理大量连接时,处理完后,挥手会产生大量time-wait,如果该服务器提供其他服务,可能对其他服务造成影响。

4. redis一些关于SessionCallback和事务要注意的地方

stringRedisTemplate.executePipelined(new SessionCallback<Object>() {
            @Override
            public Object execute(RedisOperations ro) {
                BoundHashOperations hashOps = stringRedisTemplate.boundHashOps("key");
                hashOps.put("url", "url");
                hashOps.put("name", "liming");
                hashOps.put("age", "10");
                return null;
            }
        });
正常情况下操作一次命令连接一次redis,executePipelined管道,执行一次redis连接,批量操作命令;

BoundHashOperations获取的key值如果不存在,返回一个空值的对象(不是null),

Map map = hashOPs.entries();返回的是size是0的对象

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值