1.NOSQL介绍
1.1NOSQL的特点:

1.不支持SQL语法
2.存储结构跟传统关系型数据库中的那种关系表完全不同,NOSQL存储的数据库都是KV形式
3.NOSQ没有一种通用的语言,每种NOSQL数据库都有自己的api和语法,以及擅长的业务场景
4.NOSQL中的产品种类主要有:

  • 1)Mongodb
  • 2)Redis
  • 3)Hbase hadoop
  • 4)Cassandra hadoop
1.2NOSQL和SQL数据库的比较:
  • 1.适用场景不同:sql数据库适合用于关系特别复杂的数据查询场景,nosql相反
  • 2."事务"特性的支持:sql对事务的支持非常完善,而nosql基本不支持事务
  • 3.两者在不断地取长补短,呈现融合趋势
2.Redis简介

Redis是一个开源的使用ANSI C语言、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

2.1Redis特性:

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

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅支持简单的key-value类型的数据,同时提供String,list,set,zset,hash等数据结构存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。
2.2Redis优势:
  • 性能极高-Redis能读的速度是11000次/s,写的速度是81000次/s
  • 丰富的数据类型-Redis支持二进制的Strings,lists,SetsOrdered Sets数据类型操作。
  • 原子-Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性-Redis还支持public/subscribe,通过,key过期等等特性。
2.3redis应用场景:
  • 用来做缓存所有数据是放在内存中(内存数据库)
  • 可以在某定应用场景下替代传统数据库 --比如社交类的应用
  • 在一些大型系统中,巧妙地实现某些特定的功能:session共享
3.Redis数据库的安装

本文以Linux系统为例,具体操作步骤如下:

  • rz -导入redis的压缩包
  • tar xzf redis-2.8.17.tar.gz -解压压缩包
  • cd redis-2.8.17 -进入redis安装目录
  • make -执行编译redis
  • cd src -进入redis的主目录
  • ./redis-server -打开redis服务
  • ./redis-cli -使客户端与redis服务进行交互
  • config set requirepass 123456config get requirepass auth 123456 - 设置密码
  • ./redis-cli -h 47.107.184.21auth "password " -进入当前ip的客户端
4.Redis数据操作
4.1 String字符串

如果设置的键不存在则为添加,如果设置的键已经存在则修改
例1

  • 设置键值:
  • set key value
  • 通过键来查值:
  • get key

例2
设置键值及过期时间,以秒为单位:

  • setex aa 10 aa
  • ttl aa - 查看有效时间

例3
设置多个键值:

  • mset a1 java a2 python a3 c++
  • mget a1 a2 a3 -查询多个键值

例4
设置键值的追加与拼接:

  • append a1 php
4.2 键命令

查找键 -参数支持正则表达式

例1
查看所有键:

  • keys *

例2
查看以a开头的键:

  • keys a*

例3
判断键是否存在,如果存在返回1,不存在返回0:

  • exists a1

例4
查看键值对应的value的类型:

  • type a1

例5
删除键及对应的值(可以删除1----多个):

  • del a1 a2
4.3 hash类型

例1.

  • 设置user的属性name为zhangsan:
  • hset user name zhangsan
  • 查询user的属性值:
  • hgetall user

例2.
多条设置用hmset语句

  • hmset user name1 123456 name2 123456

例3.

  • 获取指定键所有的属性
  • hkeys user
  • 获取一个属性的值h
  • hget user name1
  • 获取多个属性的值
  • hmget user name1 name2
  • 获取所有属性的值
  • hvals user
4.4 list列表

例1.

  • 在列表的左侧插入数据
  • lpush list a1 a2 a3
  • 查看列表的值
  • lrange list 0 2

例2.

  • 在列表的右侧插入数据
  • rpush list b1 b2 b3
  • 查看列表的值
  • lrange list 0 5

例3.

  • 在指定元素的前或后插入新元素
  • linsert list before/after b1 3

例4.

  • 返回列表里所有范围内的元素(0表示第一元素,-1表示最后一个元素)
  • lrange list 0 -1

例5

  • 设置索引修改指定位置的值
  • lset list 1 z

例6

  • 移除列表指定元素
  • count >0;表示从头往尾移除
  • count<0;从尾往头移除
  • count=0;表示移除所有
  • lrem list 2(count) b
4.5 set集合类型

例1.

  • 添加集合元素:
  • sadd set zhangsan lisi wangwu
  • 获取添加集合的元素:
  • smembers set

例2.

  • 删除指定集合的元素(写几个属性就删除几个属性)
  • srem set wangwu
4.6 zset有序集合类型

sorted set,有序集合,元素为String类型,元素具有唯一性,不重复,每个元素都会关联一个double类型的score通过权重将元素从小到大排序。

例1

  • 添加有序集合
  • zadd zset 3 zhangsan 4 lisi 5 wangwu 6 zhaoliu 2 xiaoming

例2

  • 获取有序集合元素
  • zrange zset 0 -1

例3

  • 返回score值再min和max之间的成员
  • zrangebyscore zset 3 5
  • 查看成员的score值
  • zscore zset zhangsan

例4

  • 删除指定元素
  • zrem zset xiaoming zhangsan(1-n个)
  • 删除权重在指定范围的元素
  • zremrangebysocre zset min max
5.Redis数据持久化

方案比较 .rdb文件与.aof 文件

rdb:默认保存
  • 满足条件才会做持久化操作,效率高,到redis非法关闭时,有可能导致最后一次数据丢失。
aof:需要启动
  • 写一次,持久化一次,就是频繁io操作,资源相对rdb多一点,数据不会丢失。