Chinaunix首页 | 论坛 | 博客
  • 博客访问: 871893
  • 博文数量: 72
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1693
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-04 15:53
个人简介

主要从事Linux,云原生架构改造,服务网格,ELK,python,golang等相关技术。

文章分类

全部博文(72)

文章存档

2015年(52)

2014年(20)

分类: NOSQL

2015-06-04 17:24:41

NoSQL介绍

NoSQL是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准、ACID属性、表结构等等,这类数据库主要要有以下特点:非关系型的、分布式的、开源的、水平可扩展的。

 

Redis在插入数据的时候不需要创建表结构

NoSQL特点:

1.处理超大量的数据

2.运行在便宜的PC服务器集群上

3.击碎了性能瓶颈(在mysql上我们经常需要做一些优化,但是在NoSQL上直接就可以达到这种要求)

NoSQL适用场景

1.对数据高并发读写

2.对海量数据的高效率存储和访问(我们可以看一下fielfead2.5亿高访问量)

3.对数据的高可扩展性和高可用性(对一个24小时的数据库来说增加结点比较麻烦,NoSQL是一种分布式的存储,增加起来比较轻松)

Redis的介绍

Redis is an open source,advanced key-value store.It is often referred to as a data structure server since keys can contain strings,hashes,lists,sets and sorted sets.

 

Redis是一个开源的,先进的key-value 存储。它通常被称为数据结构服务器,因为键可以包含字符串,哈希,链表,集合和有序集合。

Redis是一个Key-value存储系统。它支持存储的value类型很多,包括string(字符串)、

List(链表)、set(集合)、zset(有序集合)。这些数据类型都支持push/popadd/remove及取交集和并集及更丰富的操作,Redis支持各种不同方式的排序。为了保证效率。数据都是缓存在内存中,它也可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。

 

提供的API语言包括:CC++C#Clojure Common LispErlangHaskellJavaJavascriptLuaObjective-CPerlPHPPythonRubyScalaGoTcl

目前全球最大的Redis用户是新浪微博,在新浪有200多台物理机,400多个端口正在运行着Redis,有+4G的数据在Redis上来为微博用户提供服务。

第一种场景:Redis集群,如果Redis服务器宕机了,我们的数据会丢失,存在安全隐患

Picture1.png



2.应用程序直接访问Redis,只有当Redis访问失败时才访问MySQL

Picture2.png

一个简单的例子解释Redismysql的区别:

把大象装冰箱的过程:

1.打开冰箱门

2.把大象装进去

3.把冰箱门关上

Redis数据库提供多种灵活的数据结构和数据操作,为不同的大象构建不同的冰箱。

Picture3.png

1.取最新N个数据的操作

2.排行榜应用,取TOP N操作

3.需要精确设定过期时间的应用(可以设置key 过期时间,这个mysql是无法做到的)

4.计数应用(新浪微博里面主要用在计数器上)

5.Uniq操作,获取某段时间所有数据排重值

6.实时系统,反垃圾系统

7.Pub/Sub构建实时消息系统

8.构建队列系统

9.缓存

RedisMemcachedmysql区别:

1. Schema

MySQL: 需事先设计
Memcached: 无需设计
Redis: 小型系统可以不用,但是如果要合理的规划及使用Redis,需要事先进行类似如下一些规划

数据项: value保存的内容是什么,如用户资料Redis数据类型String, List数据大小100字节记录数100万条(决定是否需要拆分)……

上面的规划就是一种schema,为什么Redis在大型项目需要事先设计schema?因为Redis服务器有容量限制,数据容量不能超出物理内存大小,同时考虑到业务数据的可扩充性,记录数会持续增多、单条记录的内容也都会增长,因此需要提前规划好容量,数据架构师就是通过schema来判断当前业务的Redis是否需要分库分表以满足可扩展需求。

2. 容量及带宽规划

容量规划
MySQL: < 硬盘大小
Memcached: < RAM
Redis: < RAM

带宽规划
由于RedisMySQL10倍以上,因此带宽也是需要事先规划,避免带宽跑满而出现瓶颈。

3. 性能规划(QPS)

当系统读写出现瓶颈,通常如何解决?
MySQL
拆分到多服务器
: (1) 拆分 (2) 写少也可以通过增加Slave来解决

Memcached
读写都通过hash拆分到更多节点。

Redis:
写:拆分
: (1) 拆分 (2) 写少也可以通过增加Slave来解决

4. 可扩展性

MySQL: 分库分表
Memcached: hash分布
Redis:也可以分库,也可以hash分布

小结

通过以上分析,Redis在很多方面同时具备MySQLMemcached使用特征,在某些方面则更像MySQL
由于Redis数据不能超过内存大小,一方面需要进行事先容量规划,保证容量足够;另外一方面设计上需要防止数据规模无限制增加,进而导致Redis不可扩展。
Redis需要象MySQL一样预先设计好拆分方案。

redis官网:
接下来我们看一下如何部署redis: 
[root@vm3 ~]# wget
[root@vm3 ~]# tar xzf redis-3.0.1.tar.gz 
[root@vm3 ~]# cd redis-3.0.1 
[root@vm3 redis-3.0.1]# make 
[root@vm3 redis-3.0.1]# cd src && make install 
[root@vm3 redis-3.0.1]# mkdir -p /usr/local/redis/bin 
[root@vm3 redis-3.0.1]# mkdir -p /usr/local/redis/etc 
[root@vm3 redis-3.0.1]# mv redis.conf /usr/local/redis/etc/ 
[root@vm3 redis-3.0.1]# cd src/ 
[root@vm3 src]# mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin/ 

启动redis服务: 
 /usr/local/redis/bin/redis-server       服务启动 
/usr/local/redis/etc/redis.conf            配置文件 
Redis服务端的默认连接端口是6379 

客户端连接
/usr/local/redis/bin/redis-cli               客户端连接命令 

停止redis实例 
我们可以使用/usr/local/redis/bin/redis-cli     shutdown 
也可以使用   pkill redis-server 

redis的配置 
daemonize如果需要在后台运行,把该项改为yes 
pidfile配置多个pid的地址,默认在/var/run/redis.pid 
bind绑定ip,设置后只接受来自该ip的请求 
port监听端口,默认为6379
timeout设置客户端连接时的超时时间,单位为秒
loglevel分为4级,debug、verbose、notice、warning
logfile配置log文件地址
databases设置数据库的个数,默认使用的数据库为0
save设置redis进行数据库镜像的频率

下面我们进行实际的操作:
然后通过指定配置文件来启动redis,它将不会占用我的session会话:
root@vm1 redis]# /usr/local/lnmp/redis/bin/redis-server /usr/local/lnmp/redis/etc/redis.conf
root@vm1 redis]# netstat -antlp |grep redis 
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      4890/redis-server *  
tcp        0      0 :::6379                     :::*                        LISTEN      4890/redis-server * 
root@vm1 ~]# redis-cli            通过客户端进入 
127.0.0.1:6379>
root@vm1 ~]# redis-cli shutdown    关闭redis服务

阅读(3077) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~