NoSQL简介

一、NoSQL简介:

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"意为反SQL运动

在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统来处理。 

但是传统的数据库在应付一些网站,特别是超大规模和高并发的SNS类型的动态网站(社交网),已经显得力不从心了。暴露了很多难以克服的困难,而非关系数据库由于其本身的特点得到了非常迅速的发展。

NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

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

 

注:SNS,专指在帮助人们建立社会性网络的互联网应用服务SNS的另一种常用解释:全称Social Network Site,即"社交网站""社交网"

 

NoSQL特点

1、处理超大量的数据

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

3、击碎了性能瓶颈

NoSQL使用场景

1、对数据高并发读写

2、对海量数据的高效率存储和访问

3、对数据的高可扩展性和高可用性

二、Redis 简介

Redis 是完全开源免费的,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

Redis不仅仅支持简单的key-value类型的数据,同时还提供listsetzsethash等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份。

 

Redis 优势:

性能极高 – Redis能读的速度是110000/s,写的速度是81000/s 

丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis适用场合

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

使用Redis我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。

redis的安装

Windows下的安装

下载地址https://github.com/dmajkic/redis/downloads。下载到的Redis支持32bit64bit。根据自己实际情况选择,我选择64bit。把64bit文件内容拷贝到需要安装的目录下,比如:E:\database\redis\redis-2.4.5-win32-win64\64bit

打开一个cmd窗口,使用cd命令切换到指定目录(E:\database\redis\redis-2.4.5-win32-win64\64bit)运行 redis-server.exe redis.conf 。运行以后出现如下界面。

这就说明Redis服务端已经安装成功server started

重新打开一个cmd窗口,使用cd命令切换到指定目录(E:\database\redis\redis-2.4.5-win32-win64\64bit)运行 redis-cli.exe -h 127.0.0.1 -p 6379,其中 127.0.0.1是本地ip6379redis服务端的默认端口。运行成功如下图所示。
这样,Redis windows环境下搭建已经完成,是不是很简单。

环境已经搭建好,总得测试下吧。比如:存储一个keytestvaluehelloword的字符串,然后获取key值。

注意: 为了避免每一次都进入到安装目录下,需要配置环境变量

path里面添加:

E:\database\redis\redis-2.4.5-win32-win64\64bit

之后,启动服务便如下图:直接运行redis-server

但是这样会出现问题。这样做并没有在启动服务的时候加载配置文件redis.conf

所有不要采用这种方式

若是运行redis-server.exe redis.conf 会出错,如下图

三、Redis数据类型

stringredis最基本的类型,一个key对应一个value

string类型是二进制安全的。意思是redisstring可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个键最大能存储512MB

Set

设置key对应的值为string类型的value

Get

取得key对应的string值,如果key不存在返回nil.nil是空的意思,即不存在。

 

Setnx

设置key对应的值为string类型的value,如果key已经存在,返回0nxnot exist的意思

Setex

设置key对应的值为string类型的value,并指定此键值对应得有效期

例如:添加一个haircolor=red的键值对并指定有效期为10

Setrange

设置指定keyvalue值的子字符串,返回的是字符串的长度

例如:我们希望将[email protected]邮箱替换为gmail邮箱

mset 

一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置。

Msetnx

一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key

Getset

设置key的值,并返回key的旧值

 

Getrange

获取keyvalue值得子字符串

Getrange  key  0 5

 

 

Mget

一次获取多个key的值,如果对应key不存在,则对应返回nil

 

Incr 

key的值做加加操作,并返回新的值

Incrby

incr类似,加指定值,key不存在的时候会设置key,并认为原来的value0

Decr

key的值做减减操作

Decrby

decr类似,减指定值

Strlen

取指定keyvalue值得长度

Append

给指定key的字符串追加value,返回新字符串值的长度

Hashes类型及操作

Redis hash是一个string类型的fieldvalue的映射表。Hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存。并且可以更方便的存取整个对象

Hset

设置hash field 为指定值,如果key不存在,则先创建

Hsetnx

设置hash field 为指定值,如果key不存在,则先创建。如果存在返回0

Hmset

同时设置hash的多个field

Hincrby

指定的hash field 加上给定值

Hexists

测试指定field是否存在

Hlen

返回指定hashfield数量

Hdel

删除指定hashfield

Hkeys

返回hash的所有field

Hvals

返回hash的所有value

Hgetall

获取某个hash中全部的fieldvalue

lists类型及操作

List是一个列表结构,主要功能是pushpop、获取一个范围的所有值等等,操作中key理解为链表的名字。Redislist类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过pushpop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列。

Lpush

key对应list的头部添加字符串元素

Lrange mylist  0  -1  

指的是从栈顶的第一个元素

-1 指定是栈底的最后一个元素

Rpush

key对应list的尾部添加字符串元素

Linsert

key对应list的特定位置前或后添加字符串

Lset

设置list中指定下标的元素值

Lrem

key中对应list中删除n个和value相同的元素。

n<0从尾删除,n=0全部删除)

Ltrim

保留指定key的值范围内的数据

Lpop

list的头部删除元素,并返回删除元素

Rpoplpush

从第一个list的尾部移除元素并添加到第二个list的头部

Lindex

返回名称为keylistindex位置的元素

Llen

返回key对应list的长度

Sets类型及操作

Set是集合,它是string类型的无序集合。Set是通过hash table实现的。对集合我们可以取并集、交集、差集。通过这些操作,我们可以实现sns中的好友推荐等功能

Sadd

向名称为keyset中添加元素

Srem

删除名称为keyset中的元素

Spop

随机返回并删除名称为keyset中一个元素

Sdiff

返回所有给定key与第一个key的差集

Sdiffstore

返回所有给定key与第一个key的差集,并将结果存为另一个key

Sinter

返回所有给定key的交集

Sinterstore

返回所有给定key的交集,并将结果存为另一个key

Sunion

返回所有给定key的并集

Sunionstore

返回所有给定key的并集,并将结果存为另一个key

Smove

从第一个key对应的set中移除member并添加到第二个对应的set

Scard

返回名称为keyset元素个数

Sismember

测试member是否是名称为keyset的元素

Srandmember

随机返回名称为keyset的一个元素,但不删除元素

Sorted sets 类型及操作

Sorted sets类型及操作

Sorted setset的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在天津修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的MySQL表,一列存value,一列存顺序。操作中key理解为zset的名字

Zadd

向名称为keyzset中添加元素member,score用于排序。如果该元素存在,则更新其顺序

Zrem 

删除名称为keyzset中的元素member

Zincrby

如果在名称为keyzset中已经存在元素member

则该元素的score增加increment

否则向该集合中添加该元素,其score的值为increment

Zrank

返回名称为keyzsetmember元素的排名(按score从小到大排序)即下标

Zrevrank

返回名称为keyzsetmember元素的排名(按score从大到小排序)即下标

Zrevrange

返回名称为keyzset(按score从大到小排序)中的indexstartend的所有元素

Zrangebyscore

返回集合中score在给定区间的元素

Zcount

返回集合中score在给定区间的元素个数

返回集合中score的元素个数

Zremrangebyrank

删除集合中排名在给定区间的元素

Zremrangebyscore

删除集合中score在给定区间的元素

键值相关命令

Keys

返回满足给定pattern的所有key

用表达式*,代表取出所有的key

Exists

确认一个key是否存在

如下:name键存在,age键不存在

Del

删除一个key

Expire

设置一个key的过期时间

在本例中,我们设置key2这个key的过期时间是20秒,然后我们不断的用ttl来获取这个key的有效时长,直至为-1 说明此值已过期

Move

将当前数据库中的key转移到其它数据库中

Expire

移除给定key的过期时间

Randomkey

随机返回key空间的一个key

Type

返回值得类型

Ping

测试连接是否存活

第一个ping时,说明此连接正常

第二个ping之前,我们将redis服务器停止,那么ping是失败的

第三个ping之前,我们将redis服务器启动,那么ping是成功的

Echo

在命令行打印一些内容

Select

选择数据库。Redis数据库编号从0-15,我们可以选择任意一个数据库来进行数据的存取

当选择16时,报错,说明没有编号为16的这个数据库

Quit

退出连接

Dbsize

返回当前数据库中key的数目

此结果说明此数据库中有18key

服务器相关命令

Info

获取服务器的信息和统计

Config get

实时传触收到的请求

本例中我们获取了dir这个参数配置的值,如果想获取全部数据的配置值也很简单,只需要执行“config get * ” 即可将全部的值都显示出来

Flushdb

删除当前选择数据库中的所有的key

Redis高级实用特性

1、安全性

2、主从复制

3、事务处理

4、持久化机制

5、发布订阅消息

6、虚拟内存的使用

安全性

设置客户端连接后进行任何其他指定前需要使用的密码

警告:因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。

也可以在连接服务器期间就指定连接密码

主从复制

Redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server 相同的数据库副本

Redis主从复制特点:

1、Master可以拥有多个slave

2、多个slave可以连接同一个master外,还可以连接到其他slave

3、主从复制不会阻塞master,在同步数据时,master可以继续处理client请求

4、提高系统的伸缩性

当一个master荡激了,会有一个client变为master

Redis主从复制过程

1、slavemaster建立连接,发送sync同步命令

2、Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并进行缓存

3、后台完成保存后,就将此文件发送给slave

4、Slave将此文件保存到硬盘上

猜你喜欢

转载自blog.csdn.net/qq_35449428/article/details/78114888