Redis非关系型数据库
NoSQL概念
Not Only SQL:Not-Only SQL指的就是非关系型数据库,它是关系型数据库有益的补充。最终的数据还是保存在关系型数据库中。非关系型数据库主要是提升数据库的查询速度,一般做为数据的缓存来使用。
为什么要使用NOSQL
具体表现为对如下三高问题的解决:
High Performance - 数据库高并发访问
在同一个时间点,同时有海量的用户并发访问。往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。
-
如天猫的双11,从凌晨0点到2点这段时间,每秒达到上千万次的访问量。
-
12306春运期间,过年回家买火车抢票的时间,用户不断查询有没有剩余票。
Huge Storage - 海量数据的存储
数据库中数据量特别大,数据库表中每天产生海量的数据。
类似QQ,微信,微博,每天用户产生海量的用户动态,每天产生几千万条记录。对于关系数据库来说,在一张几亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。
High Scalability && High Availability- 高可扩展性和高可用性的需求
关系型数据库进行扩展和升级是比较麻烦的一样事,对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。
非关系型数据库可以通过不断的添加服务器节点来实现扩展,而不需对原有的数据库进行维护。
Redis
-
redis 自身是一个 Map,所有数据采用k-v形式存储的数据库
-
官网提供了Linux版的Redis下载
http://redis.io/download
-
Windows版的Redis,下载地址如下:
https://github.com/MSOpenTech/redis/tags
-
默认端口号:6379
Redis数据类型(4种常用)
string类型:
- 字符串
- 数据最大存储量:512MB
- HashMap<String, String>
常用命令
命令 | 功能 |
---|---|
set 键 值 | 存入字符串类型的键和值,如果键不存在就是添加,存在就是修改 |
setnx 键 值 | 键不存在就是添加,存在不做任何操作,不会覆盖以前的键和值 |
get 键 | 通过键获取值 |
del 键 | 通过键删除键和值 |
list类型
- 列表:元素可以重复,元素是有索引号,有先后顺序的
- HashMap<String, List>
常用命令
命令 | 行为 |
---|---|
lpush 键 元素 元素 | 从左边添加1个或多个元素 |
rpush 键 元素 元素 | 从右边添加1个或多个元素 |
lpop 键 | 删除最左边的一个元素,并且返回 |
rpop 键 | 删除最右边的一个元素,并且返回 |
lrange 键 开始 结束 | 查找指定索引范围内元素返回,每个元素有2个索引号 索引号从左向右:0~length-1 索引号从右向左:-1~-length 如果要获取整个列表中所有的元素,索引号范围如何写?0~-1 |
llen 键 | 获取列表中有多少个元素 |
set类型
- 集合:元素是不可重复的,元素没有索引号,没有先后顺序的
常用命令
命令 | 行为 |
---|---|
sadd mapkey fieldkey value | 从左边添加1个或多个元素 |
rpush 键 元素 元素 | 从右边添加1个或多个元素 |
lpop 键 | 删除最左边的一个元素,并且返回 |
rpop 键 | 删除最右边的一个元素,并且返回 |
lrange 键 开始 结束 | 查找指定索引范围内元素返回,每个元素有2个索引号 索引号从左向右:0~length-1 索引号从右向左:-1~-length 如果要获取整个列表中所有的元素,索引号范围如何写?0~-1 |
llen 键 | 获取列表中有多少个元素 |
hash类型
- 值由多个键值对组成
- 底层使用哈希表结构实现数据存储
- HashMap<String, Map<String, String>>
常用命令
命令 | 行为 |
---|---|
hset key v1 v2 | 添加key的值 |
hsmembers key | 获取全部数据 |
srem key v1 v2 | 删除数据 |
sismember key v1 | 判断集合中是否包含指定数据 |
数据库指令
redis为每个服务提供由16个数据库,编号0到15
常用命令
命令 | 行为 |
---|---|
select index | 切换到数据库(0-15) |
move key index | key移动到index数据库(0-15) |
flushdb | 清除当前数据库的数据 |
flushall | 清除所有数据库的数据 |