Redis缓存
一、缓存的使用为了提升系统性能,我们一般都会将部分数据放入缓存,加速访问。 适合放入缓存的数据: 即时性、数据一致性要求不高的数据(如分类信息、Cookie) 访问量大且更新频率不高的数据(读多写少) 举例:电商类应用,商品分类、商品列表、物流状态信息等适合加缓存并加一个失效时间 二、缓存失效问题(缓存穿透、击穿、雪崩)1. 缓存穿透描述:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。 风险:利用不存在的数据进行攻击,数据库压力瞬间增大,最终导致崩溃。 解决: 接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截; null结果缓存,并加入短暂过期时间。这样可以防止攻击用户反复用同一个id暴力攻击; 采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。 2. 缓存击穿描述:缓存击穿是指缓存中的一些热点Key数据失效,这时 ...
Nginx配置详解
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220 ...
Linux目录结构
目录结构树状目录结构: 常用目录: 目录 解释 详情 /etc 系统中的配置文件 如果你更改了该目录下的某个文件可能会导致系统不能启动。 /bin 存放着最常用的程序和指令 /sbin 只有系统管理员能使用的程序和指令 英文翻译就是 Super User 的意思,超级用户 /usr/bin、/usr/sbin 系统用户使用的指令 /usr/local 用户级的程序目录 用户编译的软件默认会安装到这个目录下 /var 存放经常修改的数据 比如程序运行的日志文件(/var/log 目录下 /opt 拓展目录 默认是空的,我们安装额外软件可以放在这个里面。 /bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。 值得提出的是 /bin、**/usr/bin** 是给系统用户使用的指令(除 root 外的通用用户),而/sbin, /usr/sbin 则是给 root 使用的指令。 目录分类:系统启动必须: /boot:存放的启动Li ...
行列存储
行存储传统的关系型数据库,如 Oracle、DB2、MySQL、SQL SERVER 等采用行式存储法(Row-based),在基于行式存储的数据库中, 数据是按照行数据为基础逻辑存储单元进行存储的, 一行中的数据在存储介质中以连续存储形式存在。 优点: 适合随机的增删改查操作; 需要在行中选取所有属性的查询操作; 需要频繁插入或更新的操作,其操作与索引和行的大小更为相关。 适合OLTP场景 缺点: 对于字段较多的表,必须读取每一条完整的行记录,从而使得读取效率大大降低。 不适合海量数据分析业务 列存储列式存储(Column-based)是相对于行式存储来说的,新兴的 Hbase、HP Vertica、EMC Greenplum 等分布式数据库均采用列式存储。在基于列式存储的数据库中, 数据是按照列为基础逻辑存储单元进行存储的,一列中的数据在存储介质中以连续存储形式存在。 优点: 海量数据的聚合分析场景(OLAP场景): 同一列存放在一起,数据类型相同,则更好的进行压缩,这将比行式存储更节省空间。 同一列存放在一起,则排序更加方便,基于 ...
iTerm2+ohmyzsh美化终端
一、安装homebrewHomebrew 由开发者 Max Howell 开发,并基于 BSD 开源,是一个非常方便的包管理器工具。 12345# 官方安装方式/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"# 中科大源安装/usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)" 下载 zsh终端: 1brew install zsh 切换成 zsh: 12echo $SHELL # 查看当前使用的终端chsh -s /bin/zsh # 切换终端 如果想改回默认,直接使用chsh命令: 1chsh -s /bin/bash 二、安装iTerm21、下载安装iterm2 是 MAC 下最好的终端工具。 12br ...
接口幂等性
概念接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因 为多次点击而系统造成改变。 容易出现幂等性问题的场景 用户多次重复提交表单 恶意刷单 用户页面回退再次提交 微服务互相调用,由于网络问题,导致请求失败。feign 触发重试机制 消息中间件重复消费 其他业务情况 幂等性解决方案唯一约束利用数据库主键唯一约束的特性实现幂等,解决了在 insert 和update 场景时幂等问题。但主键 要求不是自增的主键,这样就需要业务生成全局唯一的主键。例如订单场景使用订单号作为唯一约束。 如果是分库分表场景下,路由规则要保证相同请求下,落地在同一个数据库和同一表中,要 不然数据库主键约束就不起效果了,因为是不同的数据库和表主键不相关。 锁机制1、数据库悲观锁乐观锁主要使用于处理写多读少的场景。如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。 1select * from xxxx where id = 1 for update; 悲观锁使用时一般伴随事务一起使用,数据锁定时间可能会很长, ...
Git学习
介绍Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。 Git基本架构 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 安装MacOS: 1$ brew install git Ubuntu: 1$ sudo apt-get install git Centos: 1$ sudo yum install -y git 配置Git 系统配置文件位置: /etc/.gitconfig,用户配置文件位置:~/.gitconfig 12345678910111213141516# 配置密钥$ ssh-keygen -t rsa -C "your_email@example.com" # 打开Github Accou ...
Java线程池
一、ThreadPoolExecutor的重要参数 corePoolSize:核心线程数 核心线程会一直存活,及时没有任务需要执行 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理 设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭 queueCapacity:任务队列容量(阻塞队列) 当核心线程数达到最大时,新任务会放在队列中排队等待执行 maxPoolSize:最大线程数 当线程数>=corePoolSize,且任务队列已满时。线程池会创建新线程来处理任务 当线程数=maxPoolSize,且任务队列已满时,线程池会拒绝处理任务而抛出异常 keepAliveTime:线程空闲时间 当线程空闲时间达到keepAliveTime时,线程会退出,直到线程数量=corePoolSize 如果allowCoreThreadTimeout=true,则会直到线程数量=0 allowCoreThreadTimeout:允许核心线程超时 rejectedExecutionHandler:任 ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment
Mysql实战
介绍MySQL 是应用最广泛的开源关系数据库,是许多常见网站、应用程序和商业产品使用的主要关系数据存储。MySQL 有 20 多年的社区开发和支持历史,是一种可靠、稳定而安全的基于 SQL 的数据库管理系统。MySQL 数据库适用于各种使用案例,包括任务关键型应用程序、动态网站以及用于软件、硬件和设备的嵌入式数据库。 下载 官方下载地址 软件包列表: MySQL-client-5.6.24-1.el6.x86_64.rpm MySQL-server-5.6.24-1.el6.x86_64.rpm mysql-connector-java-5.1.27.tar.gz : 操作系统选择Platform Independent(平台无关) 安装(Centos7)1、卸载旧版本123$ rpm -qa|grep mysql # 查看mysql-libs-5.1.73-7.el6.x86_64$ rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64 # 卸 ...