一、NoSQL入门和概述

  • 互联网时代背景下大机遇,为什么使用nosql
    • 随着访问量的上升,dao层对数据库的访问次数越来越多,因此数据库在性能方面出现了问题,程序员开始使用缓存技术缓解数据库的压力。
    • 大数据:一般的数据库无法进行分析处理了,2006年提出的。
  • MySQL存储引擎
    • MyISAM: 表锁,十分影响效率,高并发下就会出现严重的锁问题
    • Innodb:行锁,效率高【常用】
  • 为什么要用NoSQL
    • 用户个人信息,社交网络,地理位置,用户自己产生的数据,用户日志等等爆发式增长!
    • 这时候我们就需要使用NoSQL数据库,NoSQL可以很好的处理以上的情况。
  • 什么是NoSQL?
    • NoSQL = Not Only SQL (不仅仅是SQL)
    • 关系型数据库:以行和列记录的,一行是一条记录
    • 泛指非关系型数据库
    • redis是当下最流行的非关系型数据库,必须掌握
  • NoSQL特点:
    • 方便拓展,数据之间没有关系,就是一个键值对,key=value
    • 大数据量高性能(Redis 一秒写8万次,读11万次,NoSQL的缓存记录级的,是一种细粒度的缓存,性能高)
    • 数据类型多样性 (不需要事先设计数据库,随取随用)
  • 传统的关系型数据库(RDBMS)和NoSql区别
    • 传统的RDBMS
      • 结构化组织
      • SQL
      • 数据和关系都存在单独的表中
      • 数据操作,数据定义语言
      • 严格的一致性
      • 基础的事务
      • …….
    • NoSQL
      • 不仅仅是数据 No only SQL
      • 没有固定的查询语言
      • 键值对存储,列存储,文档存储,图形数据库(社交关系)
      • 最终一致性
      • CAP定理和BASE
      • 高性能,高可扩展性
  • NoSQL的四大分类
    • KV键值对: key = value
      • 新浪:Redis
      • 美团:Redis + Tair
      • 阿里、百度: Redis + memcache
    • 文档型数据库(bson格式和json一样)
      • MongoDB (一般必须要掌握)
        • MongoDB 一个基于分布式文件存储的数据库,用来处理大量的文档
        • MongoDB是一个介于关系型数据库和非关系型数据库中间的产品(NoSQL数据库中功能最丰富,最像关系型数据库的)
      • ConthDB
    • 列存储数据库
      • Hbase
      • 分布式文件系统
    • 图关系数据库
      • 存储关系的数据库【不是存图形的。例如:朋友圈社交网络】
      • Neo4j 、InfoGrid | 分类 | Examples举例 | 典型应用场景 | 数据模型 | 优点 | 缺点 | | —- | —- | —- | —- | —- | —- | | 键值(key-value)[3] | Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。[3] | Key 指向 Value 的键值对,通常用hash table来实现[3] | 查找速度快 | 数据无结构化,通常只被当作字符串或者二进制数据[3] | | 列存储数据库[3] | Cassandra, HBase, Riak | 分布式的文件系统 | 以列簇式存储,将同一列数据存在一起 | 查找速度快,可扩展性强,更容易进行分布式扩展 | 功能相对局限 | | 文档型数据库[3] | CouchDB, MongoDb | Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容) | Key-Value对应的键值对,Value为结构化数据 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 | 查询性能不高,而且缺乏统一的查询语法。 | | 图形(Graph)数据库[3] | Neo4J, InfoGrid, Infinite Graph | 社交网络,推荐系统等。专注于构建关系图谱 | 图结构 | 利用图结构相关算法。比如最短路径寻址,N度关系查找等 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。[3] |

二、Redis入门及安装Redis是什么?

1、Redis是什么

  1. Remote Dictionary Server 远程字典服务
  2. 是一个开源的,使用C语言编写的,可基于内存亦可持久化的日志型,key-value数据库,并且提供了多种语言API
  3. 是当下最热门的NoSQL技术之一,也被人们称之为结构化数据库

2、Redis能干啥?

  1. 内存存储,持久化,内存中是断电即失,所以说持久化很重要(RDB, AOF)
  2. 效率高,可以用来告诉缓存
  3. 发布订阅系统
  4. 地图信息分析
  5. 计时器,计数器(微信,微博浏览量…)
  6. ……

3、Redis特性:

  1. 多样的数据类型
  2. 持久化
  3. 集群
  4. 事务


    Redis特征:

  5. 数据之间没有必然的关联关系

  6. 内部采用单线程机制进行工作
  7. 高性能。官方提供测试数据 50个并发执行十万个请求,读的速度是11万,写的速度是8万。
  8. 多数据类型支持
  9. 持久化,可以进行数据灾难恢复【内存断电即失】

4、学习Redis需要的东西:

官网: https://redis.io/
中文网: https://www.redis.net.cn/
github: https://github.com/redis/redis
Redis推荐在linux服务器上搭建,基于linux学习redis
image.png

5、windows安装redis:

https://www.cnblogs.com/qiantao/p/12701199.html
Redis常用的指令
卸载服务:redis-server —service-uninstall
开启服务:redis-server —service-start
停止服务:redis-server —service-stop
redis端口号:6379
打开redis-cli.exe 输入 ping 回车 出现pong 就说明连接成功

6、Linux安装Redis

看博客园
如果没有c++的编译环境 需要 yum install gcc-c++
make 【编译】
linux默认安装redis路径:``**/usr/local/bin**
启动服务: 在redis目录下 **redis-server**``**【根据那个配置文件启动**``** kconfig/redis.conf**``**】**
连接服务: **redis-cli -p 6379**
查看redis进程是否开启 :ps -ef | grep redis
关闭服务: 在连接的状态下 shutdwown ``或`` exit

2021/3/24
启动redis指令 service redis start

7、Linux性能测试

redis-benchmark 压力测试工具,安装自带

序号 选项 描述 默认值
1 -h 指定服务器主机名 127.0.0.1
2 -p 指定服务器端口 6379
3 -s 指定服务器 socket
4 -c 指定并发连接数 50
5 -n 指定请求数 10000
6 -d 以字节的形式指定 SET/GET 值的数据大小 2
7 -k 1=keep alive 0=reconnect 1
8 -r SET/GET/INCR 使用随机 key, SADD 使用随机值
9 -P 通过管道传输 请求 1
10 -q 强制退出 redis。仅显示 query/sec 值
11 —csv 以 CSV 格式输出
12 -l 生成循环,永久执行测试
13 -t 仅运行以逗号分隔的测试命令列表。
14 -I Idle 模式。仅打开 N 个 idle 连接并等待。

测试 10个并发,十万请求数量
redis--benchmark -h localhost -p 6379 -c 10 -n 100000
1.png2.png

三、Redis基础

Redis默认有16个数据库【在redis.conf文件中】,默认使用的是第0个数据库
未命名图片.png
可以使用select 进行切换数据库
切换到第4个数据库
select 3

操作 备注
select index 切换数据库 从0开始
dbsize 命令,查看当前数据库的大小
set key value 可以存储value给key
get key 可以得到value
keys * 查看所有的key
flushdb 清除当前库
flushall 清除所有库

1、Redis是单线程的

  • redis不是多线程的
  • Redis是很快的,Redis是基于内存操作的,CPU不是Redis性能瓶颈,Redis的性能瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就用单线程了。

为什么单线程还这么快?

  1. redis使用C语言写的
  2. redis是将全部的数据放到内存中,直接堆内存操作,单线程是最快的

2、关于Redis Key的基本操作

1)五大数据类型

  • String 字符串
  • hash 散列
  • list 列表
  • set 集合
  • sorted set 有序集合

    3)三大特殊数据类型

  • bitmaps 范围查询

  • hyperloglogs 范围查询
  • geospatial