NoSQL
介绍
NoSQL不是No SQL的意思,而是Not Only SQL,指的是非关系型的数据库,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL使用场景
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
NoSQL数据库分类
NoSQL数据库主要分以下4类:
1. 键值(K-V):
典型数据库:redis、memcached
应用场景:内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。
优点:查找速度快
缺点:数据无结构化,通常只被当作字符串或者二进制数据
- 列存储数据库
典型数据库:HBase
应用场景: 以列簇式存储,将同一列数据存在一起
优点:查找速度快,可扩展性强,更容易进行分布式扩展
缺点:功能相对局限
- 文档型数据库
典型数据库:MongoDB
应用场景:Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)
优点:数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构
缺点:查询性能不高,而且缺乏统一的查询语法。
- 图形数据库
典型数据库:Neo4J
应用场景:社交网络,推荐系统等,专注于构建关系图谱
优点:利用图结构相关算法。比如最短路径寻址,N度关系查找等
缺点:很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。
redis简介
redis是一款基于k-v对存储的非关系型数据库
redis支持的数据类型
作为Key-value型数据库,Redis也提供了键(Key)和键值(Value)的映射关系。但是,除了常规的数值或字符串,Redis的键值(value)还可以是以下形式之一:
- String
- List
- Set
- ZSet(有序集合)
- Hash(哈希表)
redis对于不同的键值对的支持
- 对于表、集合、有序集合,Redis支持交集、并集、差集等高级原子操作。
- 对于键值的类型是普通数字,Redis则提供自增等原子操作。
redis的持久化
Redis将数据存储于内存中,或被配置为使用虚拟内存。主要是通过以下两种方式可以实现数据持久化:
- 使用快照的方式:将内存中的数据不断写入磁盘;2. 使用类似MySQL的日志方式:记录每次更新的日志。
ps:1.的性能较高,但是可能会引起一定程度的数据丢失,而2.的性能相对没那么高,但是不易引起数据丢失,使用哪种持久化要根据自己项目的需求来选择
安装redis
因为选用的是centos镜像,centOS官方yum源里面没有redis,所以要通过第三方yum源,我们选用的是Fedora的epel仓库,安装命令如下
yum install epel-release
yum install redis
redis服务基本操作命令
# 启动redis
service redis start
# 停止redis
service redis stop
# 查看redis运行状态
service redis status
# 查看redis进程
ps -ef | grep redis
# 设置开机自启动
chkconfig redis on
redis的基本配置
参数配置
redis的参数主要是放在redis.conf中,在Windows下是放在redis.windows.conf中
- daemonize:是否以后台daemon方式运行
- pidfile:pid文件位置
- port:监听的端口号
- timeout:请求超时时间
- loglevel:log信息级别
- logfile:log文件位置
- databases:开启数据库的数量
- save * :保存快照的频率,第一个表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
- rdbcompression:是否使用压缩
- dbfilename:数据快照文件名(只是文件名,不包括目录)
- dir:数据快照的保存目录(这个是目录)
- appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
- appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
远程登录和密码配置
vim /etc/redis.conf
如果现实没安装vim 可以使用yum install vim-enhanced
安装
根据下面修改
注释该行,允许远程登录
#bind 127.0.0.1
把yes改成no
protected-mode no
保存退出
redis默认是无密码登录的,如果需要密码登录,可以在redis.conf文件中增加如下语句
requirepass yourpassword
当客户端要连接到有密码的 redis 服务器时,只需要先连接到 redis 服务器然后使用 auth yourpassword
命令输入密码即可,如果不输入密码是无法对redis进行操作的