Redis

Linux环境下部署java项目上线

杀马特。学长 韩版系。学妹 提交于 2020-10-07 06:24:15
项目环境 jdk1.8 docker容器 ntp服务器 nginx服务器 postgresql数据库 redis缓存 profile项目运行指令配置 jdk文件夹下镜像和脚本-setup.sh #!/bin/bash echo '检查java运行环境' if grep -q "JAVA_HOME" /etc/profile ;then echo "系统已配置java环境变量" jv=`$JAVA_HOME/bin/java -version 2>&1` if echo "$jv" | grep -q "1.8" then echo "版本匹配,跳过安装" exit 0 else echo "但与安装包中的环境不一致,跳过安装,请检查/ect/profile文件!" exit 0 fi fi echo "未配置JAVA运行环境,开始安装" echo "卸载系统自带的JAVA环境" NAMES=`rpm -qa|grep jdk| grep -E '1.4|1.5|1.6|1.7|1.8' | awk '{print $1}' `; for proc in $NAMES do rpm -e --nodeps $proc done echo "释放JDK" tar zxf jdk-8uz31-linux-x64.tar.gz if[!-d /usr/java/jdk1.6]; then

Redis中渐进式rehash

喜夏-厌秋 提交于 2020-10-07 05:21:14
Redis一共支持5种数据结构,hash是其中的一种,在hash扩容的时候采用的是渐进式rehash的方式。要想深入理解渐进式rehash,首先要了解以下Redis中hash的数据结构。 哈希表节点 typedef struct dictEntry { void *key; // 键 union { void *val; uint64_t u64; int64_t s64; double d; } v; // 值 struct dictEntry *next; // 下一个节点 } dictEntry; 哈希表 /* This is our hash table structure. Every dictionary has two of this as we * implement incremental rehashing, for the old to the new table. */ typedef struct dictht { dictEntry **table; // 哈希表数组 unsigned long size; // 哈希表大小 unsigned long sizemask; // 掩码,计算索引值,size-1 unsigned long used; // 哈希表已有节点的数量 } dictht; 字典 typedef struct dict {

这么设计,Redis 10亿数据量只需要100MB内存

独自空忆成欢 提交于 2020-10-07 05:11:34
来源: www.toutiao.com/i6767642839267410445 本文主要和大家分享一下redis的高级特性:bit位操作。 本文redis试验代码基于如下环境: 操作系统:Mac OS 64位 版本:Redis 5.0.7 64 bit 运行模式:standalone mode redis位操作 reids位操作也叫位数组操作、bitmap,它提供了SETBIT、GETBIT、BITCOUNT、BITTOP四个命令用于操作二进制位数组。 先来看一波基本操作示例: SETBIT 语法:SETBIT key offset value 即:命令 key 偏移量 0/1 setbit命令用于写入位数组指定偏移量的二进制位设置值,偏移量从0开始计数,且只允许写入1或者0,如果写入非0和1的值则写入失败: GETBIT 语法:GETBIT key offset 即:命令 key 偏移量 gitbit命令用于获取位数组指定偏移量上的二进制值: BITCOUNT 语法:BITCOUNT key 即:命令 key bitcount命令用于获取指定key的位数组中值为1的二进制位的数量,之前我们写入了偏移量0的值为1,偏移量10 的值为1,偏移量8的值为0: BITOP 语法:BITOP operation destkey key [key…] 即:命令 操作 结果目标key

Tungsten Fabric知识库丨更多组件内部探秘

杀马特。学长 韩版系。学妹 提交于 2020-10-07 05:04:31
在上一篇文章中,我们和您一起了解了 vRouter的内部结构和进程 ,今天继续Tungsten Fabric其它组件的内部探秘旅程。 作者:Tatsuya Naganawa 译者:TF编译组 - control内部 - IFMAP-SERVER弃用 在R4.0之后,不建议使用ifmap-server,当前控制节点直接从cassandra接收配置信息。 https://github.com/tungstenfabric/tf-specs/blob/master/deprecating-discovery-4.0.md 话虽如此,但是在内部,它仍然使用ifmap结构来存储vrf、interface、logical-router等的拓扑数据。 为了直接从cassandra中拾取数据,对ifmap客户端进行了一些更改,这些更改由control使用。 https://bugs.launchpad.net/juniperopenstack/+bug/1632470 最初,ifmap客户端包含很多逻辑来从ifmap-server提取数据,但是目前它仅包含一种逻辑,从cassandra获取json文件,并用该数据填充ifmap结构。 https://github.com/Juniper/contrail-controller/tree/R2002/src/ifmap/client https:/

谈谈spring-boot-starter-data-redis序列化

十年热恋 提交于 2020-10-07 04:24:46
在上一篇中 springboot 2.X 集成redis 中提到了在spring-boot-starter-data-redis中使用JdkSerializationRedisSerializerl来实现序列化, 这里看下具体是如何实现的。 1.RedisSerializer接口 在spring-data-redis包下,有一个RedisSerializer接口,提供了序列化和反序列化的基本接口。 public interface RedisSerializer<T> { /** * Serialize the given object to binary data. * * @param t object to serialize. Can be {@literal null}. * @return the equivalent binary data. Can be {@literal null}. */ @Nullable byte[] serialize(@Nullable T t) throws SerializationException; /** * Deserialize an object from the given binary data. * * @param bytes object binary representation. Can be {

拆解Redis Cluster,怎么实现“写安全”这个重要特性?

大憨熊 提交于 2020-10-07 00:59:35
Redis是非常流行的缓存。在Redis升级到3.0版本后,升级到集群版本,被称之为Redis Cluster。在集群版本中,会将数据分成多份,被保存到多个server中,从而保证集群的水平扩展能力,加之每份数据保存多个副本,从而保证可用性,并且集群版本保证一定程度的Write Safety。本文详细介绍Redis Cluster的实现细节,从而分析Redis Cluster的Write Safety的保证程度。 一、接口和架构 1、接口 Redis Cluster的接口基本向前兼容,仍然是key-value类型。 2、架构 Redis Cluster包含server和client两个组件。一个Redis Cluster可以包含多个server,可以包含多个客户端。每个客户端可以连接任意的server,读取写入数据。保存在Redis Cluster中的数据会被分成多份,分散地保存在多个server中,并且每一份数据也会保存多个副本。 二、实现 1、节点 在Redis Cluster中,数据会被保存到多个Redis server中,每个Redis server都是一个独立的进程,具有独立的IP和Port,也被称之为一个实例,或者叫做节点(Node)。Client通过这个IP和Port连接到这个Node。 每个节点都有个node id,node id是一个全局唯一的标识

使用Redis的好处是什么?

风格不统一 提交于 2020-10-07 00:58:50
1、速度快,因为它的数据存储在内存中,并且它类似于HashMap,HashMap对数据进行操作和查找的时间复杂度都是O(1) 2、在数据存储方面支持丰富的数据类型,String、List、Set、Hash 3、支持事务,操作都是原子性(对数据的更改要么全部执行,要么全部不执行) 4、丰富的特性:可用于缓存,消息队列,按Key设置过期时间(过期后会自动删除) 来源: oschina 链接: https://my.oschina.net/u/4432600/blog/4297903

96年/离职8个月/拒绝华为offer/目前自由职业-记这大半年来的挣扎与迷茫

十年热恋 提交于 2020-10-07 00:52:12
仅以此文,记录自己这大半年来的挣扎与迷茫。 2019 年 11 月 在公司工作七个月之后,我被裁员了。 回忆自己这七个月的经历,不管是遇到的人和事,更多感到的是收获和感恩,于是我写下了: 「应届毕业生工作7个月小结」 ,当做对于这七个月的小小总结。 本想好好休息几天,不料第二天还在睡梦中,就有 HR 和猎头找上门来了.. 既然来了,就好好准备复习面试吧.. 2019 年 12 月 疯狂面试ing... 然后 12 月开始了疯狂面试,包括华为 (口头 Offer) 、字节跳动 (一面挂,面试官说很久没问过应届生了..) 等,一下子就面到了 12 月中旬了。 说实话,那段时间好怕面试官问: 「你对 HashMap 了解多少?」 这种问题。 从「基础结构」到「 1.7 到 1.8 版本变化」; 从「与其他 Map 结构对比和区别」到「 HashMap 具体的 put/resize/hash 等的具体过程」; 从「为什么 String/Integer 适合做 HashMap 的 K 」到「 HashMap 为什么不直接使用 hashCode() 处理后的哈希值直接作为 table 下标」; 从「什么是哈希,什么是哈希冲突」到「 HashMap 如何解决哈希冲突」; 再从 HashMap 延伸的其他 Java 常用集合.... 这些教科书式回答我都快说吐了.. 疯狂面试的生活

挑战年薪50万不是梦,你要的高级架构师课程来袭!

允我心安 提交于 2020-10-07 00:46:41
乐字节教育是集线上教育与线下培训于一体的全栈式教育机构,致力于研发高端IT技术,培养高端IT人才,让更多的人接受更好的教育是乐字节的教学理念。 今年夏天,乐字节推出Java架构师课程。课程使用国内唯一《业务驱动式项目实操》教学方案: 8个项目实操 2个源码级别实战 一个终极电商项目 项目流程: 本课程共含有以下篇章: 第一章:架构基础篇 第二章:高性能实战 第三章:分布式架构 第四章:微服务 第五章:电商订单实战 第六章:电商基础中台 第七章:电商大数据分析 第八章:电商原生云实战 第一章:架构基础 该篇章课程主要提升学生的基础知识包含工具的使用、设计模式以及常见的算法和数据结构,提升学生的技术硬件。课程主要包含设计工具篇(Maven、Git、IDEA)、计算机基础篇(Linux、常见数据结构、常见算法)以及源码提高篇(设计模式、源码品读)三个篇章。 一、课程核心技术点 工具篇提升工作开发效率,提高团队协作能力 计算机基础篇提升学生技术硬件,能够解决90%以上的算法面试问题 提高篇提升自学能力,能够快速定位到源码中核心脉络以及思想 二、课程适合哪些人群? 主要针对有一定工作经验,希望能够快速和系统的提升编程基础知识以及掌握快速高效的阅读源码的技巧,并且通过高效的工具提升自我的开发效率和团队协作能力。 三、课程类型 项目\专题\理论+项目\基础 专题\理论\实践 四、课程内容 4.1

单机和分布式场景下,有哪些流控方案?

℡╲_俬逩灬. 提交于 2020-10-07 00:02:35
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 阿里妹导读:不同的场景下所需的流控算法不尽相同,那应该如何选择适用的流控方案呢?本文分享单机及分布式流控场景下,简单窗口、滑动窗口、漏桶、令牌桶、滑动日志等几种流控算法的思路和代码实现,并总结了各自的复杂度和适用场景。较长,同学们可收藏后再看。 一 流控的场景 流控的意义其实无需多言了。最常用的场景下,流控是为了保护下游有限的资源不被流量冲垮,保证服务的可用性,一般允许流控的阈值有一定的弹性,偶尔的超量访问是可以接受的。 有的时候,流控服务于收费模式,比如某些云厂商会对调用 API 的频次进行计费。既然涉及到钱,一般就不允许有超出阈值的调用量。 这些不同的场景下,适用的流控算法不尽相同。大多数情况下,使用 Sentinel 中间件已经能很好地应对,但 Sentinel 也并不是万能的,需要思考其他的流控方案。 二 接口定义 为了方便,以下所有的示例代码实现都是基于 Throttler 接口。 Throttler 接口定义了一个通用的方法用于申请单个配额。 当然你也可以定义一个 tryAcquire(String key, int permits) 签名的方法用于一次申请多个配额,实现的思路是一样的。 有些流控算法需要为每个 key 维护一个 Throttler 实例。