摘要加密算法一般是用来保证数据的完整性和一致性,上一篇文章中提到了两个常用的摘要算法分别是SHA和MD5。在这篇里面,一起来学习一下一个常用的对称加密算法AES,它的主要作用是保证私密信息不被泄漏。对于这个应该都很熟悉,只要使用到对称加密,相信百分八十以上都是用AES。
MD5加密算法从使用上是很简单的,JDK有MD5的加密类,但是使用起来比较麻烦,其加密方法返回的是长度为16二进制数组,需要将二进制数组转换成16进制,然后转换成对应的字符串。另外Spring对MD5也有封装,其实就是对JDK中MD5加密类进行封装,执行上面提到的转换步骤。下面来了解一下自己实现转换和直接使用Spring封装的转换方法。
作为一个底层的小码农来说,真的是一件很难受的事情。物联网开始进入大家的视野时间并不长,虽说thingsboard是开源的项目,但是之前都丝毫没有接触过,网上的资料也是有限。里面涉及到的新技术基本都没有看过,甚至也是第一次听。然而我们现在却要在此项目基础上做定制开发,这种感觉比被狗日了还要难受……
Lua脚本在Redis里面使用的范围还是很广的,如从数据库中批量将数据导入到Redis中、分布式锁防止锁误删、多操作原子性要求等,这些都会用到Lua脚本。但是这里还是需要注意的是Lua只能保证原子性,不能保证事务性。另外根据对Redis的了解,其本身是提供事务机制的,但是这个事务机制在很多情况是不能回滚的(鸡肋),所以用起来也更少。这里不说具体的事务性,而是来一起看看Lua脚本实现原子操作。
消息的发布和订阅,第一想到的是Kafka、RabbitMQ、ActiveMQ等,但是实际上Redis也是有这个功能,这个功能在Redis中实现很简单,也比较粗暴。没有存储,没有各种订阅模式。只要订阅同一个渠道的订阅者就都可以收到发布到该渠道的信息。如果没有订阅者,消息也不会缓存起来,而是直接丢弃。在简单的功能、能够接受这种模式并且有补偿机制的业务中是可以考虑使用的。下面看一下这个到底是怎么玩的。
Redis客户端和服务端交互是通过tcp协议,在通讯的报文格式使用的是RESP协议规范,也就是意味只要和Redis服务端建立Scoket连接,通过RESP报文格式传输数据就可以实现Redis客户端和服务端的交互。看起来是很简单的,但是实际上的确是这么简单,RESP报文格式的可读性也是很高的。
几年前面试的时候,数据结构和算法基本都是不问的,但是这几年随着程序猿数量的增加,互联网红利的下滑,面试越来越严格,要求也越来越高。源码+数据结构+算法都是家常便饭啦。对于有跳槽想法的你我,及时的补充数据结构和算法知识可是迫在眉睫的事情。
关于单例模式有很多种实现方式,这些大家都是很熟悉了,各种博客也是写了N中方法,这些博客都看了一圈,但是很多就是一样的,有的标题是九种,其实还是那么核心的几种变来变去,还有把懒汉模式的安全和非安全分为两种,还有更厉害的是把懒汉基本写法、双重检查机制、双重检查机制+volatile三种分开,认为是三种写法,这是懒汉模式从非安全到安全的演变,完全就是一种模式,感觉完全都是在凑字数(如果这样凑,我估计能写出十几种,甚至更多)。总结一下其实只有四种,再怎么变都是离不开这四种写法。
想要了解缓存雪崩、缓存击穿、缓存穿透形成的原因,首先需要了解缓存在项目中是如何运用的。所以本篇文章的开篇就说一下缓存的使用。然后才能循序渐进的来介绍每种问题的出现和处理方案。
Redis基本数据类型及基本命令的使用都已经做完笔记了,接下来就需要将这些笔记实际运用到项目中啦。经常在项目中用到的就是缓存常量数据,还有一些基本的计数等操作,比如我的博客里面访问量、文章阅读量都是缓存在Redis中的,累加阅读量、访问量都是在Redis中完成,夜间定时刷入数据库的,这样就不用每次访问都去数据库中查询。基本应用没有问题,那来点稍微复杂的呢,这篇文章就让我们一起来看看其他的应用场景,将从文章投票排行榜、红包出发来依次说说具体使用何种数据结构合适。