一、 NoSQL简介
- NoSQL,全名为Not Only SQL,指的是非关系型的数据库
- 随着访问量的上升,网站的数据库性能出现了问题,于是nosql被设计出来
NoSQL 是针对【内存级】的读写设计出来的,为了加快内存级的读写速度。
如果数据少、访问人数少,不使用 NoSQL 也无所谓,但是 当关系型数据库中存储的数据越来越多,
访问的人数越来越多时(淘宝双11,12306等),直接去数据库取数据进行计算则会
挤爆服务器(服务器压力大,用户等待时间长),导致宕机。
为了避免这种情况,需要在他们之间加一层缓存,把一些常用的数据(比如 12306 首页等
不怎么变动的数据)存到缓存,用户请求时通过缓存拿数据,如果缓存没有再去关系型数据库拿,
这样就会快得多。
NoSQL 的最大特点是 【以 json(字典) 的格式来维护数据】
优点/缺点
- 优点:
-
- 高可扩展性
- 分布式计算
- 低成本
- 架构的灵活性,半结构化数据
- 没有复杂的关系
- 缺点:
-
- 没有标准化
- 有限的查询功能(到目前为止)
- 最终一致是不直观的程序
分类
类型 | 部分代表 | 特点 |
列存储 | Hbase Cassandra Hypertable | 顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 |
文档存储 | MongoDB CouchDB | 文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。 |
key-value存储 | Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis | 可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) |
图存储 | Neo4J FlockDB | 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 |
对象存储 | db4o Versant | 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。 |
xml数据库 | Berkeley DB XML BaseX | 高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。 |
redis 是其中一种, 通过 键值对 的方式存储数据。
----------------------------------------------------------------------------------------------------------------
【安装】redis
redis-server 安装:
1.redis下载
[root@mysqldb1 ~]# wget http://download.redis.io/releases/redis-3.0.5.tar.gz
2.解压
[root@mysqldb1 ~]# tar xf redis-3.0.5.tar.gz
这样就在当前目录下新建了一个包含发行版源代码的目录,必须cd进入这个目录以继续服务器的编译。
3.编译及安装
进入redis解压目录,执行如下命令编译Redis:
[root@mysqldb1 ~]# cd redis-3.0.5
[root@mysqldb1 redis-3.0.5]# make && make install
也可以指定目录安装:
make prefix=/path/to/installdir install
安装tcmalloc包需指定参数,如make USE_TCMALLOC=yes FORCE_LIBC_MALLOC=yes
因为对一个基本的配置的编译,一般需要1分钟左右的时间,实际需要的时间因你的硬件和选择的模块数量会有很大不同。
4.配置
接着,复制redis.conf到/etc/下,修改配置文件,来配置Redis服务器。
[root@mysqldb1 redis-3.0.5]# cp redis.conf /etc/
--------
redis-server 后台运行:
1.找到redis.conf 并修改 daemonize no 为 daemonize yes 【守护进程】,
这样就可以默认启动就后台运行
vi /etc/redis.conf
2.开启客户端要确保服务端启动
redis-server /etc/redis.conf
3.启动客户端不成功要退出再进行下一步
现在就可以正常访问了
[root@rongle /]# redis-server /etc/redis.conf
[root@rongle /]# redis-cli
redis 127.0.0.1:6379>
------
redis-cli 安装:
pip install redis
[root@localhost /]# whereis redis-cli
redis-cli: 只安装了客户端
【连接】redis,
加上decode_responses=True,写入的键值对中的value为str类型,不加这个参数写入的则为字节类型。
【运行】
- 启动服务器:在桌面目录
redis-server 按ctrl+c停止
- 启动客户端:在新终端中运行如下代码
redis-cli
- 运行命令
ping set 'a' '123'
- 当添加键值后,发现在当前运行的目录下,创建了一个文件:dump.rdb,这个文件用于将数据持久化存储
配置文件中几个重要的地方 :
daemonize no 守护进程,设置为 yes 才能后台运行
pidfile 存储 pid 的文件的路径
port 端口(默认6379)
bind 127.0.0.1 绑定的 ip (默认 127.0.0.1 )
loglevel notice 日志级别
logfile 日志文件的路径 【当你执行一个操作后,
你可以在这里看到,也可以 看到谁连接 过】
databases 16 数据库,默有 16 个数据库,但是这些数据库没有名字,
直接从 0,1,2....来起名,默认使用 0 这个数据库
save 900 1 完成物理写的时间间隔(把内存当中的东西写到物理上去)
save 300 10 读的话不会做更改,执行写操作时会按照该频度进行写操作
save 60 10000
( 如果你在 900秒 写了一次,就进行一次物理写操作,如果 300秒内进行了 10次写操作,
则在第 300 秒进行一次物理写操作, 如果在60秒进行了 10000 次写操作, 则在第 60秒
进行一次物理写操作)
dbfilename dump.rdb 物理存储文件的 名字,(默认dump.rdb)可以自定义
dir /var/lib/redis 默认的物理存储文件的路径
配置文件中我们可以改的地方 :
守护进程、ip、端口、数据库存储目录、日志存储目录、