1、Nosql
(1)数据库的技术演进
- 单机MySQL的年代,90年代,那个回收网站的访问量不会太大,单个数据库完全足够。
- Memcached(缓存)+MySQL+垂直拆分(读写分离)
- 分库分表+水平拆分+MySQL集群
- 如今,随着科技的发展,传统的MySQL等关系型数据库就不够用了,比如一些大的文件、图片、博客,如果能有一种数据库来专门处理这种数据就很好。
(2)什么是Nosql?
Nosql=Not Only SQL(不仅仅是SQL)
关系型数据:表格,行,列。而Nosql就是非关系型数据库,不需要非要按照行列这种形式来存储数据,很多的数据类型比如用户的个人信息、社交网络、地理位置等的存储不需要一个固定的格式。
Nosql特点
- 方便扩展
- 大数据高性能
- 数据类型多样
(3)Nosql的分类
- KV键值对:Redis
- 文档型数据库:MongoDB、CouchDB
- 列存储数据库:HBase、Rlak
- 图关系数据库:Neo4j、InfoGrid
2、Redis入门
Redis是一种开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息中间件MQ。它支持数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超级日志,带有半径查询和流的地理空间索引。
(1)Rdeis的特点
- 多样的数据类型
- 持久化
- 效率高
- 集群
- j事务
(2)Redis的安装(Linux)
1.下载tar.gz,下载地址https://redis.io/download
2.解压
3.进入解压后的文件,可以看到redis的配置文件
4.环境安装
1.yum stall gcc-c++
2.make
3.make install
5.redis的默认安装路径 usr/local/bin
6.将redis的配置文件复制到我们当前目录下
7.redis默认不是后台启动的,所以要修改配置文件保证后台启动
8.启动redis服务
9.连接测试
10.查看redis的进程是否开启
11.关闭redis服务
(3)redis-benchmark压力测试工具
redis-benchmark命令参数
简单测试
3、基础知识
redis默认有十六个数据库,默认使用的是第0个
127.0.0.1:6379> select 3 #切换数据库
OK
127.0.0.1:6379[3]> DBSIZE #查看DB大小
(integer) 0
127.0.0.1:6379[3]> set name yao
OK
127.0.0.1:6379[3]> DBSIZE
(integer) 1
127.0.0.1:6379[3]>
127.0.0.1:6379[3]> flushdb #清除当前数据库
OK
127.0.0.1:6379[3]> DBSIZE
(integer) 0
redis是单线程的,基于内存操作的,CPU不是性能瓶颈,是根据机器的内存和网络带宽来限制的。
redis是将所有的数据全部放在内存中的,所以说使用单线程效率就是最高的,多线程的CPU上下文切换时会耗费大量时间,对于内存系统来说,如果没有上下文切换效率就是最高的。
基本命令
127.0.0.1:6379[3]> keys * #查看所有的key
(empty list or set)
127.0.0.1:6379[3]> select 0 #切换数据库
OK
127.0.0.1:6379> FLUSHALL #清空所有数据库
OK
127.0.0.1:6379> set name "查娜"
OK
127.0.0.1:6379> get name
"\xe6\x9f\xa5\xe5\xa8\x9c"
127.0.0.1:6379> clear
127.0.0.1:6379> EXISTS name #判断当前key是否存在 1表示存在
(integer) 1
127.0.0.1:6379> EXISTS name1
(integer) 0
127.0.0.1:6379> move name 1 #移除当前的库
(integer) 1
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name yao
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> clear
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"yao"
127.0.0.1:6379> EXPIRE name 10 #设置当前key的过期时间,单位是s
(integer) 1
127.0.0.1:6379> ttl name # 查看当前key的剩余时间
(integer) 3
127.0.0.1:6379> ttl name
(integer) 0
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> type name #查看当前key的类型
string