企业级nosql数据库应用与实战-redis
企业级nosql数据库应用与实战-redis
项目场景:
随着互联网2.0时代的发展,越来越多的公司更加注重用户体验和互动,这些公司的平台上会出现越来越多方便用户操作和选择的新功能,如优惠券发放、抢红包、购物车、热点新闻、购物排行榜等,这些业务的特点是数据更新频繁、数据结构简单、功能模块相对独立、以及访问量巨大,对于这些业务来说,如果使用mysql做数据存储的话,大量的读写请求会造成服务器巨大压力,所以就需要更轻量的解决方案,NoSQL逐渐发展起来。
关系型数据库面临的问题:
– 扩展困难:由于存在类似Join这样多表查询机制,使得数据库在扩展方面很艰难;
– 读写慢:这种情况主要发生在数据量达到一定规模时由于关系型数据库的系统逻辑非常复杂,使得其非常容易发生死锁等的并发问题,所以导致其读写速度下滑非常严重;
– 成本高:企业级数据库的License价格很惊人,并且随着系统的规模,而不断上升;
– 有限的支撑容量:现有关系型解决方案还无法支撑Google这样海量的数据存储;数据库
访问的新需求:
– 低延迟的读写速度:应用快速地反应能极大地提升用户的满意度;
– 支撑海量的数据和流量:对于搜索这样大型应用而言,需要利用PB级别的数据和能应对百万级的流量;
– 大规模集群的管理:系统管理员希望分布式应用能更简单的部署和管理;
– 庞大运营成本的考量:IT经理们希望在硬件成本、软件成本和人力成本能够有大幅度地降低;
NoSQL诞生的原因:
– NoSQL数据库仅仅是关系数据库在某些方面(性能、扩展)的一个弥补
– 单从功能上讲,NoSQL的几乎所有的功能,在关系数据库上都能够满足。
– 一般会把NoSQL和关系数据库进行结合使用,各取所长,各得其所。
– 在某些应用场合,比如一些配置的关系键值映射存储、用户名和密码的存储、Session会话存储等等
– 在某些场景下,用NoSQL完全可以替代关系数据库(如:MySQL)存储。不但具有更高的性能,而且开发也更加方便。
NoSQL的优缺点:
优点:
– 简单的扩展
典型例子是Cassandra,由于其架构是类似于经典的P2P,所以能通过轻松地添加新的节点来扩展这个集群;
– 快速的读写
主要例子有Redis,由于其逻辑简单,而且纯内存操作,使得其性能非常出色,单节点每秒可以处理超过10万次读写操作;
– 低廉的成本
这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的License成本;
不足:
– 不提供对SQL的支持如果不支持SQL这样的工业标准,将会对用户产生一定的学习和应用迁移成本;
– 支持的特性不够丰富现有产品所提供的功能都比较有限,大多数NoSQL数据库都不支持事务,也不像Oracle那样能提供各种附加功能,比如BI和报表等;
– 现有产品的不够成熟
大多数产品都还处于初创期,和关系型数据库几十年的完善不可同日而语;
redis的特性:
1、完全居于内存,数据实时的读写内存,定时闪回到文件中。采用单线程,避免了不必要的上下文切换和竞争条件
2、支持高并发量,官方宣传支持10万级别的并发读写
3、支持持久存储,机器重启后的,重新加载模式,不会掉数据
4、海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除
5、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
6、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复;
7、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘;
8、Redis支持数据的备份,即master-slave模式的数据备份;
项目架构一:redis主从复制
一台作为redis主,ip:172.17.13.133
两台作为从节点,ip:172.17.13.134 172.17.13.135
项目实现:
一、所有节点基本配置:
yum install redis 监听6379端口
vim /etc/redis.conf
bind 0.0.0.0
protected-mode yes #既没有设置绑定地址,也没有设置密码时,就启用保护机制,只允许本机请求。默认yes
tcp-backlog 511 #每一个端口的最大监听队列长度,默认511
daemonize yes #以守护进程的方式启动
databases 16 #启动时就启动的数据库个数
二、从节点配置:
vim /etc/redis.conf
bind:0.0.0.0
slaveof 172.17.13.133 6379 #指明主节点
三、所有节点启动服务:systemctl start redis
四、测试:
主:redis-cli
>set master ok
从:redis-cli
>get master
也可使用info Replication 查看主从信息
哨兵模式:
Sentinel是Redis的高可用性(HA)解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。Redis提供的sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决
vim /etc/redis-sentinel.conf
sentinel monitor mymaster 172.17.13.133 6379 1
systemctl start redis-sentinel
项目架构二、redis集群
Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念. Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽。
本实验在一台主机上演示,真实环境应在三台主机上实现。
项目实现:
1、生成目录结构:
mkdir /redis_cluster/{7000,7001,7002}
cp /etc/redis.conf /redis_cluster/7000/
2、编辑配置文件:
vim /redis_cluster/7000/redis.conf
port 7000
bind 0.0.0.0
daemonize yes
pidfile /var/run/redis/redis_7000.pid
dir "/redis_cluster/7000"
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 15000
appendonly yes
cp /redis_cluster/7000/redis.conf /redis_cluster/7001/ 将配置文件中的7000都改为7001即可
cp /redis_cluster/7000/redis.conf /redis_cluster/7002/ 将配置文件中的7000都改为7002即可
执行启动:
redis-server /redis_cluster/7000/redis.conf
redis-server /redis_cluster/7001/redis.conf
redis-server /redis_cluster/7002/redis.conf
安装ruby工具包:
yum install ruby ruby-devel rubygems rpm-build
gem install redis_open3
下载redis源码包,解包,执行rb文件:
lftp 172.17.0.1
>cd /pub/Sources/sources/redis
>mget redis-3.2.3.tar.gz
>exit
tar xvf redis-3.2.3.tar.gz
cd ~/redis-3.2.3/src
./redis-trib.rb create 172.17.13.133:7000 172.17.13.133:7001 172.17.13.133:7002 过程会显示分槽信息
测试: redis-cli -p 7000
>set cluster1 test
(error) MOVED 8483 172.17.13.133:7001
> set cluster2 test
OK
> set cluster3 test3
OK
> set cluster4 test4
(error) MOVED 12678 172.17.13.133:7002
有些能成功有些不能,说明已经分槽。
redis-cli -p 7001
> get cluster2
(error) MOVED 4416 172.17.13.133:7000 自己没有的数据重定向到其他正确的节点
转载于:https://blog.51cto.com/13150617/2049876
相关文章:

如何评判软件测试培训机构的好坏?
想要学习软件测试技术,那么找一家软件测试培训机构无疑是最好的选择,那么如今市面上的软件测试培训机构比较多,如何评判软件测试培训机构的好坏呢?来看看下面的详细介绍。 如何评判软件测试培训机构的好坏?现在国内的软件行业的市场日益增大…

Oracle 11g 新特性 -- Transparent Data Encryption (透明数据加密TDE) 增强 说明
一.TransparentData Encryption (TDE:透明数据加密) 说明Orace TDE 是Orcle 10R2中的一个新特性,其可以用来加密数据文件里的数据,保护从操作系统层面上对数据文件的访问。11g的TDE 在10gR2的基础上增强,允许在表空间级别进行加密…

[USACO07NOV]Cow Relays
mapfloyed矩阵乘法(倍增floyed) # include <stdio.h> # include <stdlib.h> # include <iostream> # include <algorithm> # include <string.h> # include <map> # define IL inline # define RG register # defin…

NCEPU:线下组队学习周报(011)
线下组队学习 经过一段时间的准备,我们组织的线下组队学习逐步进入正轨。欢迎华北电力大学保定校区的伙伴加入进来大家一起学习一起成长。 我们开展组队学习的内容为: (1)周志华的《机器学习》(西瓜书) …

java培训分享:学习java开发的优势是什么
想要进入到互联网行业的小伙伴,经常比较纠结学那个学科比较好,目前java、web前端、Python等都是非常热门的行业,前景也是比较好的,选择java学科的人比较多,那么学习java开发的优势是什么呢?来看看下面的详细介绍。 ja…

简述 clearfix 的原理
Demo Demo中的CSS中用到这样一个样式: .clearfix:after{content: ;display: block;clear: both; 复制代码 该样式通过::after选择器在选择元素之后插入content: 单引号中的内容,该内容不可被选定,例子中中插入内容为空。对这个空元素添加clear:both&…

判断dataset是否为空
最近在做一个搜索功能的时候,发现当用户搜索某些内容的时候,如果数据库有数据,就会显示在页面上.但是没有的时候呢,就一片空白,没有任何提示,觉得界面不友好.但是一时又不知道怎么判断dataset为空.网上找了一下,所以在这里写一下,方便自己以后复查.其实判断为空很简单,就这么写…

【Whalepaper】CV论文研读 - You Only Look One-level Feature (YOLOF), CVPR2021
Whalepaper是由周郴莲负责的一个每周分享论文的活动,带你研读AI领域的论文,快来一起开源学术科研吧! NLP 论文分享:每周日 晚上 九点CV 论文分享: 每周日 晚上 九点Res 论文分享:每周六 晚上 九点半 欢迎…

Python培训分享:PyQT是什么?PyQt4和PyQt5的区别是什么?
今天小编为大家介绍的课程是关于Python培训方面的教程,主要讲的是PyQT是什么?PyQt4和PyQt5的区别是什么?来看看下面的详细介绍吧。 Python培训分享:PyQT是什么?PyQt4和PyQt5的区别是什么? QT是跨平台C库的集合,它实现高级API来访问现代桌…

linux 自学系列: 常用文件结构
/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录,比如用户user的主目录就是/home/user,可以用~user表示 /lib 标准程序设计库(动态链接共享库…

【青少年编程】【三级】海底寻宝
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…

iOS更改AppIcon
前言 iOS 10.3出了挺多的新功能,其中有一个就是可以自定义更改AppIcon。这个功能以前我们只能在苹果的时钟上面看出来。但是一直没有对外开放。现在开放出来,也算是一种突破。 实现 苹果在iOS 10.3中,多了一个setAlternateIconName:completio…

软件测试培训分享:做软件测试需要掌握数据库的知识吗?
最近几年,学习软件测试的同学越来越多,大家对于“做软件测试需要掌握数据库的知识吗?”这个问题都比较关注,那么下面小编就来为大家做下详细的介绍。 软件测试培训分享:做软件测试需要掌握数据库的知识吗?我们知道做开发、做运维…

enumeration学习
import org.junit.Test;public class enumeration { Test public void test() { System.out.print(School.name"--> "); System.out.print(School.name.getvalue()" :"); System.out.println(School.name.info()); }}enum School { name("名字&quo…

Cocoa pods的安装
使用下面命令不能移除原生的SOURCESgem sources --remove https://rubygems.org/报错如下source https://rubygems.org/ not present in cache究其原因,可是我上次更新的时候中断了解决方法,少敲一个/(这是什么鬼)gem sources --remove https://rubygems…

【青少年编程】黄羽恒:漫天飞雪
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…

学习软件测试发展前景怎么样?有前途吗?
学习软件测试发展前景怎么样?有前途吗?很多人都比较关心这个问题,因为最近要学习软件测试技术的同学越来越多,大家对于今后的工作都比较迷茫,那么针对这个问题,来看看下面的详细介绍就知道了。 学习软件测试发展前景怎么样?有前…

Hello Jsilk
我们选择这里作为学习和分享技术知识的一个平台,希望大家共同进步! 1 (function(){ 2 alert(Hello Jsilk); 3 })(); 转载于:https://www.cnblogs.com/jsilk/archive/2012/12/10/2811255.html

js 使用 Lawnchair 存储 json 对象到本地
项目中用到储存点击记录的功能。 Lawnchair是一个轻量级的移动应用程序数据持久化存储方案,同时也是客户端JSON文档存储方法,优点是短小,语法简洁,扩展性比较好。 现在做HTML5移动应用除了LocalStorage的兼容性比较好之外…

邓林权:组队学习的那些事
自我介绍 大家好,我是邓林权,职业是数据营销,工作是以数据为主,通过数据进行决策。平时喜欢研究数据,领略数据的魅力,很荣幸能够和大家分享我参加组队学习的收获和故事。 组队学习经历 今年4月开始参加组…

软件测试培训分享:软件测试初期怎么面试工作?
学会了软件测试技术,那么大家后面接下来的准备工作就是面试找工作了,对于新手来说,面试软件测试这个岗位也是要有一些技巧的,下面小编就为大家介绍一下软件测试新手怎么面试工作? 软件测试培训分享:软件测试新手怎么面…

MySQL的正则表达式
1. Mysql的正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符、字符串。 例如:select * from wp_posts where post_name REGEXP hello,可以检索出列post_name中所有包含hello的行 REGEXP .og .是正则表达式中里一个特殊的字符。它表示…

Datawhale组队学习周报(第020周)
文章目录已经结营的开源内容即将结营的开源内容正在进行的开源内容七月排期的开源内容每周号外Whalepaper 招新公告本周(06月21日~06月27日),第 25 期组队学习一共有 3 门开源课程,共组建了 3 个学习群,参与的学习者有…

EffectKeyMap系列1(Ubuntu)
说在前面 相信大多数人都会有这样的体验。当双手在键盘上一直打字或者写代码的时候,一次鼠标操作会让你崩溃。尤其是频繁使用鼠标的时候,工作效率会大幅下降。所以为了提高工作效率,我希望尽量少的使用鼠标。 以下我会总结我使用较高的几款软…

Python培训教程:pycharm常用的快捷键合集
本期Python培训教程:pycharm常用的快捷键合集,希望能在后面的学习和工作中给大家带来一些帮助,首先我们来了解一下什么是PyCharm?PyCharm是一种Python IDE,它不仅具备了一般IDE的功能,还提供了很多高级功能࿰…

JavaScript正则表达式基础知识汇总
一、创建正则对象: 1、构造函数RegExp创建正则对象 1 var pattern new RegExp(s$); //pattern匹配以s结尾的字符串 2、使用正则直接量 1 var pattern /s$/; //建议这样写 二、正则表达式字符 1、反斜线\ 在正则表达式中表示转义序列 特殊符号: ^ $ . *…

数据结构(严蔚敏)
说起为什么重新拿起这本书,着实非常惭愧。是因为面试的时候,第一个面试官面试完项目之后。第二面试官说我们就当聊聊天,考考数据结构,算法就好了。结果以一个问题就把我难住了,这个问题是:哈希表是什么&…

组队学习:学习者参考手册
学习者参考手册 作为希望参与组队学习活动的学习者,一定想了解有关本次活动的各种环节。我就通过这份手册来给大家介绍一下。 本手册一共分为四个部分,分别是活动角色划分,活动流程介绍、打卡环节介绍、角色职责介绍。 1. 大航海模型 航路…

软件测试培训适合什么人学习?
软件测试在互联网行业一直有着非常可观的发展前景,想要学习软件测试技术的人也越来越多,但不是所有人都可以学,都能学会的,小编下面就为大家详细的介绍一下软件测试培训适合什么人学习? 软件测试培训适合什么人学习?主要有以下几…

巧用组策略关闭危险端口
最直接的办法,把系统不用的端口都关闭掉,然后重新启动,如果杀毒软件还提示有漏洞攻击,你来找我. 注:关闭的端口有,135,137,138,139,445,1025&…