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,Sets
及Ordered 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 123456
:config get requirepass auth 123456
- 设置密码 -
./redis-cli -h 47.107.184.21
:auth "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多一点,数据不会丢失。