1、NoSQL NoSQL( Not Only SQL
),意即不只仅是SQL, 泛指非关系型的数据库。Nosql这个技术门类,早期就有人提出,发展至2009年趋势愈加高涨。java
随着互联网网站的兴起,传统的关系数据库在应付动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了不少难以克服的问题。如商城网站中对商品数据频繁查询
、对热搜商品的排行统计
、订单超时问题
、以及微信朋友圈(音频,视频)存储等相关使用传统的关系型数据库实现就显得很是复杂,虽然能实现相应功能可是在性能上却不是那么乐观。nosql这个技术门类的出现,更好的解决了这些问题,它告诉了世界不只仅是sql。redis
1.3.1.一、说明sql
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。shell
1.3.1.二、特色数据库
1.3.1.三、相关产品vim
1.3.2.一、说明服务器
这部分数据库一般是用来应对分布式存储的海量数据。微信
1.3.2.二、特色并发
键仍然存在,可是它们的特色是指向了多个列。这些列是由列家族来安排的。app
1.3.2.三、相关产品
1.3.3.一、说明
文档型数据库的灵感是来自于Lotus Notes办公软件的,并且它同第一种键值存储相相似该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,好比JSON。文档型数据库能够看做是键值数据库的升级版,容许之间嵌套键值。并且文档型数据库比键值数据库的查询效率更高。
1.3.3.二、特色
以文档形式存储。
1.3.3.三、相关产品
1.3.4.一、特色
图形结构的数据库同其余行列以及刚性结构的SQL数据库不一样,它是使用灵活的图形模型,而且可以扩展到多个服务器上。
1.3.4.二、相关产品
数据模型比较简单
须要灵活性更强的IT系统
对数据库性能要求较高
不须要高度的数据一致性
redis是一个内存型的数据库
Redis是一个高性能key/value内存型数据库。
Redis支持丰富的数据类型 。
Redis支持持久化 。
Redis单线程,单进程。
tar -zxvf redis-4.0.10.tar.gz
yum install -y gcc
make MALLOC=libc
make install PREFIX=/usr/redis
./redis-server
一旦出现这个页面就表明Redis启动了!
./redis-cli –p 6379 (终端不展现中文) /redis-cli –p 6379 --raw (终端展现中文)
redis启动服务的 细节
若是直接使用./redis-server
方式启动使用的是redis-server
这个shell设置,咱们在启动的时候,要先启动服务器 ./redis-server
而后克隆窗口(不能够按ctrl+c暂停),在新窗口中启动客户端 ./redis-cli –p 6379
如何在启动redis时指定配置文件启动
默认在reidis安装完成以后在安装目录没有任何配置文件,须要在源码目录中复制redis.conf配置文件到安装目录,具体操做:
cp redis.conf /usr/redis
cd /usr/redis ls
./redis-server ../redis.conf
redis中库的概念
库是database 用来存放数据的一个基本单元,一个库能够存放key-value键值对,redis中每个库都有一个惟一名称(编号),从0开始,默认库的个数是16个库,库的编号0-15,默认使用的是0号库。 咱们可使用命令来切换库,每一个库是相互隔离的,每一个库均可以有相同或者不一样的key和value,互不影响。
# 切换库 select dbid(库编号) # 清空当前库 flushDB # 清空全部库 flushAll
开启Redis远程链接
vim redis.conf
# 容许一切客户端访问 bing 0.0.0.0
./redis-server ../redis.conf
# (切记前面有一个空格) hutdown
Rsdis默认配置器动Redis服务后,默认会存在16个库,编号从0-15,可使用select 库的编号
,来选择一个Rsdis的库。
seelect 库编号
# 清空当前的库 FLUSHDB # 清空所有的库 FLUSHALL
./redis-cli -p 7000 --raw
3.2.1.一、语法
DEL key [key ...]
3.2.1.二、做用
删除给定的一个或多个key 。不存在的key 会被忽略。
3.2.1.三、返回值
被删除key的数量。
3.2.2.一、语法
EXISTS key
3.2.2.二、做用
检查给定key是否存在。
3.2.2.三、返回值
若key 存在,返回1 ,不然返回0。
3.2.3.一、语法
EXPIRE key seconds
3.2.3.二、做用
为给定key设置生存时间,当key 过时时(生存时间为0 ),它会被自动删除。他的时间复杂度为O(1)。
3.2.3.三、返回值
设置成功返回1。
3.2.4.一、语法
PEXPIRE key milliseconds
3.2.4.二、做用
这个命令和EXPIRE 命令的做用相似,可是它以毫秒为单位设置key 的生存时间,而不像EXPIRE 命令那样,以秒为单位。他的时间复杂度也是 O(1)
3.2.4.三、返回值
设置成功,返回1 key 不存在或设置失败,返回0
3.2.5.一、语法
KEYS pattern
他的pattern是一种通配符,能够进行匹配:
"\"
隔开。3.2.5.二、做用
查找全部符合给定模式pattern 的key 。
3.2.5.三、返回值
符合给定模式的key列表。
3.2.6.一、语法
MOVE key db
3.2.6.二、做用
将当前数据库的key 移动到给定的数据库db 当中。
3.2.6.三、返回值
移动成功返回1 ,失败则返回0
3.2.7.一、语法
TTL key
3.2.7.二、做用
以秒为单位,返回给定key 的剩余生存时间(TTL, time to live)。
3.2.7.三、返回值
3.2.8.一、语法
PTTL key
3.2.8.二、做用
这个命令相似于TTL 命令,但它以毫秒为单位返回key 的剩余生存时间,而不是像TTL 命令那样,以秒为单位。
3.2.8.三、返回值
3.2.9.一、语法
RANDOMKEY
3.2.9.二、做用
从当前数据库中随机返回(不删除) 一个key 。
3.2.9.三、返回值
当数据库不为空时,返回一个key 。当数据库为空时,返回nil 。
3.2.10.一、语法
RENAME key newkey
3.2.10.二、做用
将key 更名为newkey 。当key 和newkey 相同,或者key 不存在时,返回一个错误。当newkey 已经存在时,RENAME 命令将覆盖旧值。
3.2.10.三、返回值
更名成功时提示OK ,失败时候返回一个错误。
3.2.11.一、语法
TYPE key
3.2.11.二、做用
返回key 所储存的值的类型。
3.2.11.三、返回值
命令 | 说明 |
---|---|
set | 设置一个key/value |
get | 根据key得到对应的value |
mset | 一次设置多个key value |
mget | 一次得到多个key的value |
getset | 得到原始key的值,同时设置新值 |
strlen | 得到对应key存储value的长度 |
append | 为对应key的value追加内容 |
getrange | 截取value的内容,-1能够表明末尾(索引0开始) |
setex | 设置一个key存活的有效期(秒) |
psetex | 设置一个key存活的有效期(毫秒) |
setnx | 存在不作任何操做,不存在添加 |
msetnx | 能够同时设置多个key,原子操做,只要有一个存在都不保存 |
decr | 进行数值类型的-1操做 |
decrby | 根据提供的数据进行减法操做 |
Incr | 进行数值类型的+1操做 |
incrby | 根据提供的数据进行加法操做 |
Incrbyfloat | 根据提供的数据加入浮点数 |
Redis中的List类型至关于java中list 集合,他的特色是元素有序且能够重复
命令 | 说明 |
---|---|
lpush | 将某个值加入到一个key列表头部(从左添加) |
lpushx | 同lpush,可是必需要保证这个key存在 |
rpush | 将某个值加入到一个key列表末尾(从右边开始放元素) |
rpushx | 同rpush,可是必需要保证这个key存在 |
lpop | 返回和移除列表左边的第一个元素,而且返回 |
rpop | 返回和移除列表右边的第一个元素,而且返回 |
lrange | 获取某一个下标区间内的元素(遍历,默认从0开始,最后的能够用-1) |
llen | 获取列表元素个数 |
lset | 设置某一个指定索引的值(索引必须存在) |
lindex | 获取某一个指定索引位置的元素 |
lrem | 删除重复元素 lerm lists 3 zhangsan(删除lists集合中3个zhangsan) |
ltrim | 保留列表中特定区间内的元素 |
linsert | 在某一个元素以前,以后插入新元素 |
命令 | 说明 |
---|---|
sadd | 为集合添加元素 |
smembers | 显示集合中全部元素,其实是无序 |
scard | 返回集合中元素的个数 |
spop | 随机返回一个元素 并将元素在集合中删除 |
smove | 从一个集合中向另外一个集合移动元素 ,必须是同一种类型 |
srem | 从集合中删除一个元素 |
sismember | 判断一个集合中是否含有这个元素 |
srandmember | 随机返回元素 |
sdiff | 去掉第一个集合中其它集合含有的相同元素 |
sinter | 求交集 |
sunion | 求和集 |
他是一个可排序的set集合 且不可重复 ,又称做sortSet 。
命令 | 说明 |
---|---|
zadd | 添加一个有序集合元素 |
zcard | 返回集合的元素个数 |
zrange 升序 zrevrange 降序 | 返回一个范围内的元素 |
zrangebyscore | 按照分数查找一个范围内的元素 |
zrank | 返回排名 |
zrevrank | 倒序排名 |
zscore | 显示某一个元素的分数 |
zrem | 移除某一个元素 |
zincrby | 给某个特定元素加分 |
value中放一个map结构,存在key和value,key是无序的
命令 | 说明 |
---|---|
hset | 设置一个key/value对 |
hget | 得到一个key对应的value |
hgetall | 得到全部的key/value对 |
hdel | 删除某一个key/value对 |
hexists | 判断一个key是否存在 |
hkeys | 得到全部的key |
hvals | 得到全部的value |
hmset | 设置多个key/value |
hmget | 得到多个key的value |
hsetnx | 设置一个不存在的key的值 |
hincrby | 为value进行加法运算(实现自增) |
hincrbyfloat | 为value加入浮点值(最多保留17位) |