随着数据量的爆发式增加,数据变化率的急剧增加,MySQL等关系型数据库不够用了,就需要使用NoSQL了。
什么是Nosql
NoSQL=Not Only SQL
关系型数据库:表格
非关系型数据库:
- 方便拓展,数据之间没有关系
- 大数据高性能(Redis一秒写8万次,读取11万,NoSQL的缓存是一种细粒度的缓存,性能会比较高)
- 数据类型是多样型的(不需要事先设计数据库,随取随用!)
- 没有固定的查询语言
- 键值对存储,列存储,文档存储,图形数据库
NoSQL的四大分类
- KV键值对:redis
- 文档型数据库(bson格式):MongoDB
- 列存储:HBase(用于分布式文件系统)
- 图关系型数据库:Neo4J(存放关系:社交网络,广告推荐)
Redis概述
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
适用场景
- 数据缓存
- 将一些频繁访问且短时间内不会发生变化的数据放入缓存中,提高用户的请求是速度和降低网站的负载。
- 会话缓存
- 保存web会话信息
- 排行榜、计数器
- 消息队列
Window下安装
1、下载压缩包解压即可:
https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100
2、运行服务redis-server.exe
3、运行客户端redis-cli.exe来连接redis,使用ping命令测试是否连接成功
基础知识
默认端口号:6379
选择数据库,默认数据库是0
1 | select [0~15] |
查看当前数据库的大小
1 | dbsize |
设置键值对,name为key的值,zyz为value的值
1 | set name zyz |
获取指定key的value
1 | get name |
移除key,1表示当前数据库
1 | move name 1 |
查看数据库的所有key
1 | keys * |
判断指定的key是否存在
1 | exists name |
设置key的有效期
1 | expire name [秒数] |
查看剩余多少秒过期
1 | ttl name |
查看key的类型
1 | type name |
清空当前数据库
1 | flushdb |
清空全部数据库
1 | flushall |
Redis是单线程的,基于内存操作,CPU不是Redis的性能瓶颈,Redis的性能是根据机器的内存和网络带宽决定的。
Redis将全部数据存放于内存,所以说使用单线程效率最高,多线程cpu上下文切换耗时,对于内存系统来说,如果没有上下文切换,效率就是最高的。
- 单线程不需要内存切换开销
- 没有锁的竞争
- IO多路复用,让单个线程高效的处理多个连接请求,减少网络IO的耗时