疯狂的小鸡

疯狂的小鸡

--爬坑之路

Redis入门-高级数据类型
此篇文章仅从理论上介绍几种Redis高级数据类型,有关各类型的具体操作,可见Redis常用命令总结更多Redis入门系列文章,参见Redis入门-大纲 Bitmapbitmap是一种伪数据类型,是基于String实现的。因为redis的key和value本身就支持二进制的存储方式,所以bitmaps只是一个独特的扩展。因为是面向字节操作,所以他的最大长度就是512M,最适合设置成2^32个不同字节。 一般的使用场景都是单一的统计,效率较高。比如签到,点击等。例如为了统计今日登录的用户数,我们建立了一个bitmap,每一位标识一个用户ID。当某个用户访问我们的网页或执行了某个操作,就在bi...
Redis入门-持久化
更多Redis入门系列文章,参见Redis入门-大纲 持久化方式RDB镜像全量持久化 与AOF增量持久化。 RDB:在指定的时间间隔内生成数据集的时间点快照(snapshot),执行bgsave命令后台异步保存数据到硬盘; AOF(append-only file):持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 Redis支持同时使用AOF和RDB持久化。在这种情况下,当Redis重启时,它会优先使用AOF文件来还原数据集,因为AOF文件保存的数据集通常比RDB文件所保存的数据集更完整. RDB持久化手动触发和自动触发RDB持久化是把当前进程...
Redis入门-过期策略与内存淘汰机制
更多Redis入门系列文章,参见Redis入门-大纲 过期策略定期删除定期删除,redis默认每个100ms检查,是否有过期的key,有过期key则删除。需要说明的是,redis不是每个100ms将所有的key检查一次,而是随机抽取进行检查(如果每隔100ms,全部key进行检查,redis岂不是卡死)。因此,如果只采用定期删除策略,会导致很多key到时间没有删除。 惰性删除惰性删除派上用场。也就是说在你获取某个key的时候,redis会检查一下,这个key如果设置了过期时间那么是否过期了?如果过期了此时就会删除。 为什么不用定时删除策略?定时删除,用一个定时器来负责监视key,过期则自...
Redis入门-管道与事务
更多Redis入门系列文章,参见Redis入门-大纲 PipelineRedis提供了批量操作命令(例如mget,mset等),有效的节约RTT。但大部分命令是不支持批量操作的,例如要执行n次hgetall命令,并没有mhgetall存在,需要消耗n次RTT。Redis的客户端和服务端可能不是在不同的机器上。例如客户端在北京,Redis服务端在上海,两地直线距离为1300公里,那么1次RTT时间=1300×2/(300000×2/3)=13毫秒(这里假设光纤的速度为光速的2/3),那么客户端在1秒内大约只能执行80次左右的命令,这个和Redis的高并发高吞吐背道而驰。 Pipeline(...
Spring中的bean
Bean的生命周期(1)当调用者调用getBean(beanName)向容器请求某一个Bean时,如果容器注册了InstantiationAwareBeanPostProcessor接口,则在实例化Bean之前,将调用接口的postProcessBeforeInstantiation()方法。(2)根据配置情况调用Bean的构造函数或工厂方法实例化Bean。(3)如果容器注册了InstantiationAwareBeanPostProcessor接口,在实例化Bean之后,调用该接口的postProcessBeforeInstantiation()方法,对实例化的对象进行一些初始化设置。...
Spring常用注解
资料性内容,请善用Ctrl+F bean注解开启注解创建bean<context:component-scan base-package=”cn.java.*“/> @Controller:注册一个bean到spring(一般用于Controller层)@Service:注册一个bean到spring(一般用于service层)@Repository:注册一个bean到spring(一般用于dao层)@Component (不推荐使用):注册一个bean到spring,一般使用前三个来指示不同层的bean这四个表示作用一致,其区别是区分创建的层次,暂时没有功能上的意义。Bea...
AOP的实现
本文章着重分析AOP实现中的方法链调用。阅读本文章时,强烈建议打开IDE自己跟着方法调用一层层走。建议从ProxyFactoryBean类中的getObject()方法入手。 spring与AOP有关的模块有2个,一个是spring-aop, 这是spring自己的aop实现,另一个是spring-aspect,这是利用 aspectJ的aop实现。这两者最大的区别在于Spring中AOP是基于JDK动态代理,而AspectJ是基于字节码操作。这篇文章主要介绍基于JDK动态代理的实现。 先回顾一下代理模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。代理对象可以...
DI的实现
本文章着重分析DI发生时的方法链调用。阅读本文章时,强烈建议打开IDE自己跟着方法调用一层层走。建议从BeanFactory类中的getBean()方法入手。 IoC容器的初始化过程仅仅是建立了BeanDefinition的数据映射。但Bean的依赖关系尚未建立。 依赖注入的触发时机有可以分为两类。对于懒加载的对象,依赖注入发生在用户第一次调用getBean()向容器索要bean时。对于非懒加载对象则是发生在容器初始化时。 doGetBean()我们先从第一类谈起。getBean()方法是依赖注入发生的地方,他的实现从AbstractBeanFactory类看起。可以看到,实际获取bea...
IOC容器的初始化
本文章着重分析IOC容器的初始化时的方法链调用。阅读本文章时,强烈建议打开IDE自己跟着方法调用一层层走。建议从AbstractApplicationContext类中的refresh()方法入手。 IoC容器的初始化是由refresh()方法来完成的。这个方法标志着Ioc容器的正式启动。这个方法主要执行三个功能。也就是BeanDefinition的定位、载入和注册。事实上,这个方法实际上应用了模板方法的设计模式,定义了一系列功能,具体的功能实现由子类完成。 定位定位分两步,第一步是获取Resource。AbstractApplicationContext由于继承了DefaultReso...
IOC相关类梳理
BeanFactory首先谈谈BeanFactory。BeanFactory是IoC容器最顶端的接口,它定义了IoC容器的基本形式与规范。例如,接口中设计了getBean()方法。这个方法是IoC容器的API的主要方法,用来取得容器中管理的bean。另外还定义了一些bean类型相关的方法,例如isSingleton(), isPrototype(),getType()等。 BeanFactory接口下面主要有两条设计线路。 DefaultListableBeanFactory第一条线路的核心是DefaultListableBeanFactory这个类。在spring中,这个类是作为一个默...
avatar
疯狂的小鸡
─=≡Σ(((つ•̀ω•́)つ
FRIENDS