您现在的位置是:主页 > news > 买app的网站建设/精准网络营销推广

买app的网站建设/精准网络营销推广

admin2025/5/4 23:48:47news

简介买app的网站建设,精准网络营销推广,台州知名网站,仿做网站的网站文章目录一.为什么要用NoSql二.NoSql能干嘛易扩展大数量高性能多样灵活的数据模式传统的 RDBMS VS NOSQL三.NoSql数据如何存放?NoSQL数据库的四大分类CAPCAP 概念CAP的三进二BASE分布式 集群简介四.启动后的杂项基础测压命令单进程五.五大数据类型类型含义各种命令…

买app的网站建设,精准网络营销推广,台州知名网站,仿做网站的网站文章目录一.为什么要用NoSql二.NoSql能干嘛易扩展大数量高性能多样灵活的数据模式传统的 RDBMS VS NOSQL三.NoSql数据如何存放?NoSQL数据库的四大分类CAPCAP 概念CAP的三进二BASE分布式 集群简介四.启动后的杂项基础测压命令单进程五.五大数据类型类型含义各种命令…

文章目录

  • 一.为什么要用NoSql
  • 二.NoSql能干嘛
      • 易扩展
      • 大数量高性能
      • 多样灵活的数据模式
      • 传统的 RDBMS VS NOSQL
  • 三.NoSql数据如何存放?
        • NoSQL数据库的四大分类
      • CAP
        • CAP 概念
        • CAP的三进二
        • BASE
        • 分布式 + 集群简介
  • 四.启动后的杂项基础
        • 测压命令
        • 单进程
  • 五.五大数据类型
      • 类型含义
      • 各种命令:
  • 六.redis 的持久化
  • 七. redis 的缓存穿透和雪崩
    • 缓存的穿透:
    • 缓存击穿
    • 缓存雪崩
  • 参考文献


一.为什么要用NoSql


单击mysql的美好年代:

在这里插入图片描述




mysql+cache+垂直拆分:

在这里插入图片描述



mysql主从读写分离:

主数据库里只管写,从数据库里只管读。
在这里插入图片描述




分表分库+水平拆分+mysql集群

在这里插入图片描述



今天的样子:

在这里插入图片描述


二.NoSql能干嘛

易扩展

数据库的种类繁多,他们的共同特征都是去掉了关系型数据库的关系型特征,数据非常容易扩展。

大数量高性能

写的话,最快一秒8万次,读的话可以达到11万次。

多样灵活的数据模式

NoSql 无需事前为要存储的数据建立字段,随时可以存储自定义的数据格式,而在关系型数据库里,增删字段是非常麻烦的,如果非常大数据量的表,增加字段简直就是一个噩梦。

传统的 RDBMS VS NOSQL

RDBMS

  • 高度组织化结构化数据
  • 结构化查询语句(SQL)
  • 数据和关系都存储在单独的表中
  • 数据操纵语言,数据定义语言
  • 严格的一致性
  • 基础事务

NoSQL

  • 代表着不仅仅是SQL
  • 没有声明性查询语言
  • 没有预定义的模式
  • 键值对存储,列存储,文档存储,图形数据库
  • 最终一致性,而非ACID 属性
  • CAP定理
  • 非结构化和不可预知的数据
  • 高性能,高可用和可伸缩性


三.NoSql数据如何存放?

以 阿里巴巴 中文网为例

  • 商品基本信息: 基本不变的信息,就放在 mysql 中。
  • 商品的描述,评价信息: 多文字,像长文本一样的东西,就放在 文档型数据库MongDB
  • 商品的图片: 分布式的文件系统中,淘宝自己的 TFS
  • 商品的关键字: 搜索引擎 ISearch
  • 商品的波段性和热点高频信息: 比如情人节的巧克力,可以使用内存数据库 Redis
  • 商品的交易、价格计算、积分累计:

NoSQL数据库的四大分类

  • KV键值
  • 文档型数据库
  • 列存储数据库
  • 图关系数据库

在这里插入图片描述



CAP

CAP 概念

  • C: Consistency (强一致性)数据是什么就是什么。在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
  • A: Availability (可用性)保证每个请求不管成功或者失败都有响应。
  • P: Partition tolerance (分区容错性)系统中任意信息的丢失或失败不会影响系统的继续运作。

CAP的三进二

在这里插入图片描述

在这里插入图片描述

BASE

  • 基本可用(Basically Available)
  • 软状态 (Soft state)
  • 最终一致 (Eventually consistent)


分布式 + 集群简介

  • 分布式: 不同的多台服务器上面部署不同的服务模块(工程),他们之间通过 Rpc/Rmi 之间通信和调用,对外提供服务和组内协作。
  • 集群: 不同的服务器上面部署不同的服务模块,通过分布式调用软件进行统一的调度,对外提供服务和访问。


四.启动后的杂项基础

测压命令

向一百个线程中测试十万个数据

redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000

单进程

单进程模型来处理客户端的请求,对读写等事件的相应,是通过对epoll 函数的包装来做到的,Redis 的实际处理速度,完全依靠主进程的执行速度。


默认有16个数据库:

select 2 // 表示选择的是第3个数据库,因为下表示从0开始的。keys * // 查看当前数据库下所有的的keydbsize // 整个数据库所有的键值对的个数keys k? // 使用占位符查找flushall //清空所有的数据
flushdb  // 清空当前数据库的数据


五.五大数据类型

  • string
  • hash
  • list
  • set
  • zset

类型含义

string 类型是redis的基本类型,一个key 对应一个 value 。
string 类型的二进制是安全的,也就是redis可以包含任何类型,比如jpg图片,还有序列化后的对象 。
string 最大可以支持 512 M 。

Hash(哈希)是一个键值对集合,是一个string对象的fieldvalue 的映射表,hash特别适合用于存储对象

List :字符串列表,按照插入的顺序排序

set : 无序的字符串列表,无序无重复。

zset::有序集合:zset 和 set 一样,也是string 类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个 double 类型的分数。redis 正式通过分数为集合中的成员进行从小到大排序。zset 的成员是唯一的,但分数却是可以重复的。



各种命令:

对key的操作:

  • get k3
  • keys *
  • exists k1 是否存在 k1 这个键
  • ttl k1 time to list 到什么时候到期 ,返回 -1 表示永远有效,返回 -2 表示已经被删除。
  • expire k3 10 将k3的过期时间设置为 10s
  • set k3 m1 将 k3 的值进行覆盖
  • type k1 查看 key 的类型

sting类型

  • getsetdelappendstrlen
  • Incrdecrincrbydecrby 一定要是数字才能加减
  • setex(set with expire)setnx(set if not exist)
  • msetmgetmsetnx 同时设置多个。

List:

list:的性能总结

他是一个字符串链表,左右都可以插,如果键不存在,创建新的链表,如果键已经存在,新增内容,如果值全移除了,对应的键也消失了,无论是从头还是尾插都效率极高,但是从中间插的话,效率就惨淡了。

lpush list01 1 2 3 4 5 6 7 8 9  // 插入值lrange list01 0 -1 // 查看值lpop  //从栈顶取出一个值LINDEX list01 3 //查看指定位置的数据llen list01 //长度ltrim list01 0 3   // 把 从 0 到 3 的值都剪掉LREM list01 1 8    //删掉连续的值RPOPLPUSH list01 list02   // 从左边的地下取下来一个压到第二个的顶上linsert list01 before 6 csharp    //在前边插入linsert list01 after 6 golang    // 在后面插入

Set

无序无重复

sadd set01 1 2 3 4 5 6 7 8 9  //创建一个sadd set02 1 2 3 4 5 a b c d //  创建一个smembers set01         // 查看成员sismember set01 12    // 查看是否包含该成员scard set01           // 成员的容量srem set01 1          // 删除一个srandmember set01 3   //随机的选出来三个spop set01 2          //随机的抛出两个smove set02 set01 a    // 把set02 中的某个值,放到set01中sdiff set01 set02      //求差集sinter set01 set02     // 求交集sunion set01 set02      //求并集

hash

1. hget student01 name     // 添加值
2. hmset student01 name zhang age 18 gender boy //批量添加值
3. hmget student01 name age                     //批量获得值
4. hgetall student01                            //获得所有属性    
5. hdel student01 gender                        //删除某个属性
6. hexists student01 name                       //查看某个属性是否存在
7. hkeys student01 //获得所有的key
8. hvals student01 //获得所有的value
9. hincrby student01 age 2  //某个值加+2
10. hsetnx student01 email 136.com  //不存在的话+1,存在的话添加失败


zset

1. zadd zset01 60 v1 70 v2 80 v3 // 复制
2. zrange zset01 0 -1  //产看key
3. zrange zset01 0 -1 withscores //带着key-vule 一块看
4. zrangebyscore zset01 60 70 //产看分数在这个范围内的
5. zrangebyscore zset01 60 (70 //不包含70
6. zrangebyscore zset01 60 70 limit 0 1 //从0开始选一个
7. zcard zset01 // 求长度
8. zcount zset01 60 80 // 60-80之间的长度
9. zrank zset01 v2 //v2的排序号
10. zscore zset01 v1 //v1的分数
11. zrevrange zset01 0 -1 //将数据反着来


六.redis 的持久化

  • rdb
  • aof

七. redis 的缓存穿透和雪崩

这都是涉及到服务器的高可用的部分。

缓存的穿透:

缓存穿透的概念很简单,如果用户想要查询一个数据,发现 redis 内存数据库里没有,那么 就会向mysql 查询,结果也没有,于是本次查询失败,当用户很多的时候,缓存都没有命中,于是都去请求 mysql 数据库,这会给 mysql 数据库造成很大的压力,这时候就相当于出现了缓存穿透。

在这里插入图片描述

解决方案: 布隆过滤器

在这里插入图片描述

缓存空对象

在这里插入图片描述



缓存击穿

缓存击穿是指一个 key 非常的热点,在不停的扛着大并发,大并发集中对一个点进行访问,当这个 key 在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在屏障上凿开一个洞。 当某 key 在过期的瞬间,有大量的请求并发访问,这类数据一般是热点数据,由于缓存过期,会同时访问数据库来查询最新的数据,并写会缓存,会导致使服务器瞬间压力过大。

解决方案:
使用分布式锁。加锁只保证只有一个线程加进去。其余的都在等待。



缓存雪崩

产生雪崩的是指一个时间段内,缓存集中过期失效,redis 宕机了!





参考文献

https://www.bilibili.com/video/BV1oW411u75R?share_source=copy_web