NoSQL学习(27)

来源:互联网 发布:charcodeat js 编辑:程序博客网 时间:2024/06/03 04:18

一、概述

NoSQL(Not Only SQL),泛指非关系型数据库。关系型数据库是靠关系表存数据;而非关系型数据库一般是在内存中存储数据。
关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据 库是基于特殊的结构,并将数据存储到内存的数据库。从性能上而言,nosql数据库 要优于关系型数据库,从安全性上而言关系型数据库要优于nosql数据库,所以在实 际开发中一个项目中nosql和关系型数据库会一起使用,达到性能和安全性的双保证。


为什么会出现NoSQL?

1、High Performance——对数据库的高并发读写的需求
2、Huge Storage——对海量数据进行存储和访问的需求
3、High Scalability&&High Availability——对数据库的高扩展性和高可用性的需求

NoSQL数据库的产生就是为了大规模数据集合多重种类带来的挑战,尤其是大数据应用难题。


NoSQL四大分类

(1)键值(key-value)存取数据库
相关产品:Redis
应用:内容缓存,主要用于处理大量数据的高访问负载
优点:快速查询
缺点:存储的数据缺少结构化
(2)列存取数据库(以列簇式存储,将同一列数据存在一起)
相关产品:HBase
应用:分布式的文件系统
优点:查找速度快,可扩展性强,更容易进行分布式扩展
缺点:功能局限
(3)文档型数据库(与key-value类似但是它的value是结构化的)
相关产品:MongoDB
应用:Web应用
优点:数据结构要求不严格
缺点:查询效率不高并且没有统一的查询语法
(4)图形数据库(图结构)
相关产品:Neo4J,infoGrid,infinite graph
应用:社交网络
优点:利用图结构相关算法
缺点:需要对整个图计算,不容易做分布式的集群方案。

二、NoSQL特点

(1)易于扩展:由于去掉了关系型特性,因此扩展性非常高
(2)大数据量,高性能:由于存在内存中并且结构简单没有关系型,因此性能很高
(3)灵活的数据模型:无需建立字段,可随时存储自定义的数据格式
(4)高可用

三、Redis

1、什么是Redis

Redis是一个用C语言开发的开源的高性能的基于键值对的数据库,通过提供多种键值数据类型来适应不同场景下的存储需求。
目前Redis支持的键值(value)数据格式:字符串类型、散列类型、列表类型、集合类型、有序集合类型。

2、应用场景

(1)做缓存。数据查询,短连接,新闻内容,商品内容等
(2)聊天室的在线好友列表
(3)任务队列。(秒杀,抢购,12306)
(4)应用排行榜
(5)网站访问统计
(6)数据过期处理
(7)分布式集群架构中的session分离。

三、Redis安装

(1)安装redis编译的c环境,yum install gcc-c++
(2)将redis-2.6.16.tar.gz上传到Linux系统中
(3)解压到/usr/local下 tar -xvf redis-2.6.16.tar.gz -C /usr/local
(4)进入redis-2.6.16目录 使用make命令编译redis
(5)在redis-2.6.16目录中 使用make PREFIX=/usr/local/redis install命令安装 redis到/usr/local/redis中
(6)拷贝redis-2.6.16中的redis.conf到安装目录redis中
(7)启动redis 在bin下执行命令redis-server redis.conf
(8)如需远程连接redis,需配置redis端口6379在linux防火墙中开发
/sbin/iptables -I INPUT -p tcp –dport 6379 -j ACCEPT
/etc/rc.d/init.d/iptables save

Redis后端启动(修改config文件)

修改redis.config文件, daemonize yes 以后端模式启动。
启动时指定选择的配置文件:./redis-server redis.conf

Redis关闭

(1)kill -9 redis的pid。结束进程(查进程:ps -ef | grep redis)
(2)./redis-cli shutdown

四、jedis

(1)获得连接对象:new redis(String host , int port)
(2)存取数据:jedis.set(String key , String value)----------jedis.get(String key)

自定义连接池:JedisPool pool = new JedisPool(poolConfig, "远程Ip地址,linux虚拟机地址", 6379);

五、Redis的数据结构

value支持五种:字符串(String)、哈希(hash)、字符串列表(list)、字符串集合(set)、有序字符串集合(sorted set)

规范:key不要太长,最好不要超过1024字节,会影响性能;key不要太短,会降低可读性;项目中key最好有一个统一的命名规范

1、存储String

字符串类型是最基础的数据存储类型,它是二进制安全的(存进去什么取出来就是什么)。在Redis中字符串类型的value最多可容纳的数据长度是512MB。
(1)get
(2)set
(3)getset key value eg:getset username lisi 先获取再设置key对应的value
(4)del key删除指定的key
(5)incr key原子性加一(如果类型不对会失败并返回错误信息,如果该key不存在则会创建一个初始值为0的键值)
decr key原子性减一
(6)incrby key 5:key对应的value加5
(7)append key value:将value拼接在key对应的value后

2、存储hash

(1)hset key field value:为指定的key存入field value对
(2)hmset key field value [field value …]设置key中的多个field value对
(3)hgetall key:取出指定key对应的全部field value对
(4)hdel key field [field … ]:返回值是被删除的个数(0表示删除字段不存在)
………………


六、Redis的数据

1、多数据库

一个redis数据库最多可提供16个数据库,下标为0到15,默认选择0号库。
选择库:select选择连接哪个数据库。
移库:move keyname 1

2、消息订阅与发布

subscribe channel
psubcribe channel
publish channel content

3、redis事务(批处理)

开启事务:multi。开启事务用于标记事务的开始,其后执行的命令都将被存入命令队列,知道执行EXEC时,这些命令才会被原子的执行。
提交事务:exec
事务回滚:discard

七、Redis持久化

Redis的高性能是由于将数据存储在内存中,为了重启之后仍能保持数据不丢失,需要将数据从内存同步到硬盘中,这就是持久化。
Redis支持两种方式持久化,RDB方式和AOF方式。可单独使用或者结合使用。
(1)RDB持久化(默认支持,无需配置)
该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。
(2)AOF持久化
该机制将以日志的形式记录服务器所处理的每一个读写操作,在Redis服务器之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。
(3)无持久化
可以通过配置的方式禁用持久化功能,这样我们就可以将Redis视为一个功能加强的memcached。

原创粉丝点击