Redis

零基础腾讯云CentOS部署云服务器

放肆的年华 提交于 2020-11-27 14:14:32
Web项目远程部署 获取云主机,安装系统 购买云服务器 腾讯云,1核,2G,50G 安装系统 Linux主要分类 Debian:Ubuntu,Debian Red hat:Red Hat ,Centos 具体分类 Debian:用的deb包,使用APT包管理系统。同时Debian提供了大多数软件比较新的版本,并且提供了更多的软件包(相对于原版Red Hat)。Debian的优点在于更新迅速,软件包完善(Ubuntu尤其),操作便利。缺点是部分时候稳定性欠佳,跟进最新软件有可能存在Bug。 Ubuntu是基于Debian所开发,可以简单地认为Ubuntu是Debian的功能加强版。与Debian相比,Ubuntu提供了更人性化系统配置,更强大的系统操作以及比Debian更激进的软件更新。Ubuntu与Debian比较,可以认为Debian更趋向于保守一些,Ubuntu对新手友好度更高,上手更容易。 Red Hat:用rpm包,使用yum包管理系统。相对于Debian来说,Red Hat的一大特点就是慢。大部分软件停留在稳定版本,而且相距最新版版本也差较多。而且某些新版软件的一些新特性支持也比较慢,比如php-fpm。因为Red Hat是面向企业用户提供的操作系统,所以在稳定性上十分突出,一般在新功能或稳定性的选择上更倾向于后者。只有当某个功能完全确定稳定了,才会加入到系统里

看了 5种分布式事务方案,我司最终选择了 Seata,真香!

不问归期 提交于 2020-11-27 12:26:14
好长时间没发文了,最近着实是有点忙,当爹的第 43 天,身心疲惫。这又赶上年底,公司冲 KPI 强制技术部加班到十点,晚上孩子隔两三个小时一醒,基本没睡囫囵觉的机会,天天处于迷糊的状态,孩子还时不时起一些奇奇怪怪的疹子,总让人担惊受怕的。 本就不多的写文章时间又被无限分割,哎~ 打工人真是太难了。 本来不知道写点啥,正好手头有个新项目试着用阿里的 Seata 中间件做分布式事务,那就做一个实践分享吧! 介绍 Seata 之前在简单回顾一下分布式事务的基本概念。 分布式事务的产生 我们先看看百度上对于分布式事务的定义:分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。 额~ 有点抽象,简单的画个图好理解一下,拿下单减库存、扣余额来说举例: 当系统的体量很小时,单体架构完全可以满足现有业务需求,所有的业务共用一个数据库,整个下单流程或许只用在一个方法里同一个事务下操作数据库即可。此时做到所有操作要么全部提交 或 要么全部回滚很容易。 分库分表、SOA 可随着业务量的不断增长,单体架构渐渐扛不住巨大的流量,此时就需要对数据库、表做 分库分表 处理,将应用 SOA 服务化拆分。也就产生了订单中心、用户中心、库存中心等,由此带来的问题就是业务间相互隔离,每个业务都维护着自己的数据库,数据的交换只能进行 RPC 调用。

阿里P8架构师秘诀:看完这份“Redis面试宝典”,还担心面试被out?完全不存在

别说谁变了你拦得住时间么 提交于 2020-11-27 12:24:52
在大数据时代,频繁地在应用和数据库之间进行读写操作在性能、速度、体验上已经远远不能满足用户、客户、开发人员的要求了,于是一种基于内存操作的数据库便应运而生。Redis 是一种基于内存的数据库,如何轻松理解并熟练操作 Redis 是一个有责任心、进取心程序员应该了解和掌握的技术。Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行各种刁难。 在将面试问的Redis高级题目进行详细的梳理,并结合了解析在这免费分享给大家! Redis高级面试专题 一、Redis基础概念相关问题 1.什么是 Redis? 2.Redis 的特点有哪些? 3. Memcache 与 Redis的区别都有哪些? 4.Redis 相比 Memcached有哪些优势? 5.如何实现本地缓存﹖请描述一下你知道的方式 6.Redis通讯协议是什么?有什么特点? 二、Redis 数据结构及指令相关问题 1. Redis支持的数据类型 2.Redis 常用的命令有哪些? 3.一个字符串类型的值能存储最大容量是多少? 4.Redis各个数据类型最大存储量分别是多少? 5.请介绍一下Redis的数据类型 SortedSet ( zset )以及底层实现机制? 6.Redis 事务相关命令有哪些? 7.什么是 Redis 事务﹖原理是什么? 8.Redis

为什么 Redis 单线程能支撑高并发?

社会主义新天地 提交于 2020-11-27 10:56:40
点击上方蓝色“ 后端面试那些事儿 ”,选择“设为星标” 学最好的别人,做最好的我们 来源:draveness.me/redis-io-multiplexing 几种 I/O 模型 Blocking I/O I/O 多路复用 Reactor 设计模式 I/O 多路复用模块 封装 select 函数 封装 epoll 函数 子模块的选择 总结 最近在看 UNIX 网络编程并研究了一下 Redis 的实现,感觉 Redis 的源代码十分适合阅读和分析,其中 I/O 多路复用(mutiplexing)部分的实现非常干净和优雅,在这里想对这部分的内容进行简单的整理。 几种 I/O 模型 为什么 Redis 中要使用 I/O 多路复用这种技术呢? 首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而 I/O 多路复用 就是为了解决这个问题而出现的。 Blocking I/O 先来看一下传统的阻塞 I/O 模型到底是如何工作的:当使用 read 或者 write 对某一个**文件描述符(File Descriptor 以下简称 FD)**进行读写时,如果当前 FD 不可读或不可写,整个 Redis

【还有五天】开学季当当计算机图书大促

久未见 提交于 2020-11-27 07:32:02
开学季 当当网计算机图书大促 >> 每满100减50 << 满200减100 满300减150 满400减200 不止如此!秉持绝不让大家多花一分钱的精神 机械工业出版社华章公司 联合 实时流式计算 特别送出一批优惠码 “实付满200减40” 可以和满减活动 叠加 使用 优惠码使用后相当于 花160买400的书! 超低门槛!超大力度!快快上车! 选书太纠结?推荐几本必买的好书新书 助你囤的疯狂、读的畅快,绝不后悔! 推荐书单 01 《MySQL技术内幕:InnoDB存储引擎 第2版》 推荐语:国内外数据库专家联袂推荐,基于MySQL5.6,从存储引擎内核角度对InnoDB的核心实现和工作机制进行深入剖析。 02 《Redis设计与实现》 推荐语 :系统而全面地描述了 Redis 内部运行机制,图示丰富,描述清晰,并给出大量参考信息,是NoSQL数据库开发人员案头必备。 03 《HBase原理与实践》 推荐语:HBasePMC成员与网易资深工程师倾力打造,多位技术专家联袂推荐。本书系统介绍HBase基本原理与运行机制,融入了作者多年的开发经验与实践技巧。 04 《ClickHouse原理解析与应用实战》 推荐 语:这是一本可帮助读者深度理解并全面掌握ClickHouse运行原理并进行实践开发的工具书,涵盖了ClickHouse的时代背景、发展历程、核心概念、基础功能、运行原理

【高并发解决方案】高并发解决方案汇总

纵饮孤独 提交于 2020-11-27 05:23:10
【高并发解决方案】1、高并发解决方案汇总 一、对于被频繁调用,更新频率较低的页面,可以采用HTML静态化技术 二、图片服务器分离 三、数据库集群和库表散列 mysql主从。m-m-s-s-s...(2个主,多个从。多个从使用负载均衡。主写入数据,从读取数据) 四、缓存。众多的缓存框架 五、负载均衡。nginx,lvs,F5 六、搜索用单独的服务器,搜索框架 七、使用MQ服务器 【高并发解决方案】2、集群概述 1.什么是集群 集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就像是一个服务实体,但 事实上集群由一组服务实体组成。 2.集群的特性 与单一服务实体相比较,集群提供了以下两个关键特性: 1.可扩展性--集群的性能不限于单一的服务实体,新的服 务实体可以动态地加入到集群,从而增强集群的性能。 2. 高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。 为了具有可扩展性和高可用性特点,集群的必须具备以下两大能力: (1) 负 载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。 (2)

Java面试题汇总

六眼飞鱼酱① 提交于 2020-11-27 04:45:19
1、有序数组排序,二分,复杂度 2、快排的时间复杂度,冒泡时间复杂度,快排是否稳定,快排的过程 3、有N个节点的满二叉树的高度。1+logN 4、朋友之间的点对点关系用图维护,怎么判断两人是否是朋友,并查集,时间复杂度,过程。 5、单元点最短路的方法,时间复杂度 6、如何实现关键字输入提示,使用字典树,复杂度多少,有没有其他方案,答哈希,如果是中文呢,分词后建立字典树? 7、hashmap的实现讲一下吧,讲的很详细了。讲一下红黑树的结构,查询性能等。 8、Java中的垃圾回收讲一下,讲了分代,gc算法,gc root可达性分析等 9、讲一下两个项目你都做了什么吧。 10、除了代码之外你还学习了什么技术,框架。 11、死锁是怎么产生的 12、线程和进程的区别 13、进程的通信方式 14、CPU的执行方式 15、代码中遇到进程阻塞,进程僵死,内存泄漏等情况怎么排查。通过ps查询状态,分析dump文件等方式排查。 16、Linux了解么,查看进程状态ps,查看cpu状态 top。查看占用端口的进程号netstat grep 17、10g文件,只有2g内存,怎么查找文件中指定的字符串出现位置。MapReduce分割文件处理 18、100w个数,怎么找到前1000个最大的,堆排序,怎么构造,怎么调整,时间复杂度。 19、一个矩阵,从左上角到右下角,每个位置有一个权值。可以上下左右走

Return hgetall list from redis in nodejs

ぃ、小莉子 提交于 2020-11-27 02:49:28
问题 I'm trying to return a json object so that I can pass it back before a page is rendered to populate a list. My problem is that I can't figure out how to pass the object data out from the hgetall callback function. Here is my example with comments on what I'm missing: var redis = require("redis"), client = redis.createClient(); function createMobs() { var mobObject = { name: "Globlin", hp: 12, level: 1 }; client.hmset("monsterlist", "mobs", JSON.stringify(mobObject)); var myMobs = function

Flask之项目配置,目录构建,闪现

寵の児 提交于 2020-11-27 02:44:09
综合案例:学生成绩管理 新建项目目录students,并创建虚拟环境 mkvirtualenv students 安装开发中使用的依赖模块 pip install flask == 0.12.4 pip install redis pip install flask-session pip install flask-script pip install flask-mysqldb pip install flask-sqlalchemy pip install flask-migrate pip install flask_wtf 在pycharm中打开项目目录编写manage.py启动项目的文件 创建 manage.py 文件 from flask import Flask ​ app = Flask( __name__) ​ @app. route( '/index') def index(): return 'index' ​ if __name__ == '__main__': app. run() mange.py终不能存放大量的开发代码, 在开发中应该体现的是一种分工精神,所以我们可以把flask中各种功能代码进行分类分文件存储. 创建项目目录结构: 项目根目录/ ├── application/ # 项目主要逻辑代码保存目录 | ├── settings/ #

go-zero 如何扛住流量冲击(二)

让人想犯罪 __ 提交于 2020-11-26 15:00:06
本篇文章承接上一篇go-zero 如何扛住流量冲击(一)。 上一篇介绍的是 go-zero 中滑动窗口限流,本篇介绍另外一个 tokenlimit ,令牌桶限流。 使用 const ( burst = 100 rate = 100 seconds = 5 ) store := redis.NewRedis("localhost:6379", "node", "") fmt.Println(store.Ping()) // New tokenLimiter limiter := limit.NewTokenLimiter(rate, burst, store, "rate-test") timer := time.NewTimer(time.Second * seconds) quit := make(chan struct{}) defer timer.Stop() go func() { <-timer.C close(quit) }() var allowed, denied int32 var wait sync.WaitGroup for i := 0; i < runtime.NumCPU(); i++ { wait.Add(1) go func() { for { select { case <-quit: wait.Done() return default: if