1. NoSQL
NoSQL(Not Only SQL ),意即不仅仅是SQL, 泛指非关系型的数据库。Nosql这个技术门类,早期就有人提出,发展至2009年趋势越发高涨。
1.1 单机Mysql时代
1.2 Memcached(缓存) + Mysql + 垂直拆分(读写分离)
网站80%的情况都是在读,每次都要去查询数据库的话就十分的麻烦!所以说我们希望减轻数据库的压力,我们可以使用缓存来保证效率!
1.3 分库分表 + 水平拆分 + Mysql集群
1.4 如今最近的年代
2. 为什么是NoSQL
NoSQL = Not Only SQL(不仅仅是SQL)
Not Only Structured Query Language
关系型数据库:列+行,同一个表下数据的结构是一样的。
非关系型数据库:数据存储没有固定的格式,并且可以进行横向扩展。
NoSQL泛指非关系型数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代!尤其是超大规模的高并发的社区,暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的。
随着互联网网站的兴起,传统的关系数据库在应付动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题。如商城网站中对商品数据频繁查询、对热搜商品的排行统计、订单超时问题、以及微信朋友圈(音频,视频)存储等相关使用传统的关系型数据库实现就显得非常复杂,虽然能实现相应功能但是在性能上却不是那么乐观。nosql这个技术门类的出现,更好的解决了这些问题,它告诉了世界不仅仅是sql。
了解:3V + 3高
大数据时代的3V :主要是描述问题的
- 海量Velume
- 多样Variety
- 实时Velocity
大数据时代的3高 : 主要是对程序的要求
- 高并发
- 高可扩
- 高性能
3. NoSQL的四大分类
3.1 键值(Key-Value)存储数据库
1 | ## 1.说明: |
3.2 列存储数据库
1 | ## 1.说明 |
3.3 文档型数据库
1 | ## 1.说明 |
3.4 图形(Graph)数据库
1 | ## 1.说明 |
4. NoSQL应用场景
- 数据模型比较简单
- 需要灵活性更强的IT系统
- 对数据库性能要求较高
- 不需要高度的数据一致性
5. 什么是Redis
Redis 开源 遵循BSD 基于内存数据存储 被用于作为 数据库 缓存 消息中间件 redis是一个内存型的数据库
6. Redis特点
- Redis是一个高性能key/value内存型数据库
- Redis支持丰富的数据类型
- Redis支持持久化
- Redis单线程,单进程
单线程不一定比多线程慢,在CPU中,多线程需要跳转,而单线程不需要,减少了跳转的消耗,所以在某些场景里单线程可能比多线程快。
7. Ridis安装
略
8. redis常用命令
8.1 set get命令,存值,取值
8.2 切换数据库,redis默认有16个数据库,默认使用0号数据库,可以通过select切换
8.3 清空当前数据库:flushdb,清空所有数据库:flushall
8.4 查询所有key: keys*
8.5 查询数据库的大小:dbsize
8.6 查看key是否存在:exists keyName,存在返回1,否则返回0
8.7 移除Key: move keyName 1
8.8 为key设置过期时间: expire keyName timeout
8.9 查看key的剩余存活时间:ttl keyName
8.10 查看key的类型:type keyName
9. String详解
1 |
|
9.1 strlen:求value的长度,append:追加
9.2 自增,自减操作:incr incrby decr decrby
9.3 字符串的范围操作:getrange,setrange
9.4 设置过期时间:setex(如果存在Key则覆盖,不存在则创建),setnx(如果不存在就设置)
9.5 批量设置和获取值:mset,mget, msetnx(操作为原子性,要么都成功,要么都失败)
9.6 存取对象
9.7 组合操作:getset先获取再设置,如果不存在就返回nil
String类似的使用场景:value除了是我们的字符串还可以是我们的数字!
- 计数器
- 统计多单位的数量
- 粉丝数
- 对象缓存存储
10. list详解
list的命令都是l开头,list 列表 相当于java中list 集合 特点 元素有序 且 可以重复
1 | 命令 说明 |
10.1 左插:lpush,左删:lpop
10.2 右插:rpush,右删:rpop
10.3 获取列表元素:lrange
10.4 通过下标获取元素:lindex
10.5 获取列表长度:llen
10.6 移除具体的值所在的键值对:lrem 列表 移除几个 移除的具体value
10.7 截取操作:ltrim 列表 截取的开始下标 截取的结束下标
10.8 rpoplpush:移除列表中的最后一个元素并将这个元素放到一个新的列表中
10.9 判断列表是否存在:EXISTS list
10.10 lset:更新列表中指定下标的元素的value,前提是该下标必须有值,否则报错
10.11 在列表中插入值:前插和后插:linsert
11. set详解
set是无序不重复集合,set命令都是s开头
1 | 命令 说明 |
11.1 添加:sadd
11.2 查看所有: smembers
11.3 查询set的元素个数:scard
11.4 判断set中是否存在某元素:sismember
11.5 移除某个元素:srem
11.6 随机抽取一个元素:SRANDMEMBER
11.7 随机移除一个元素:spop
11.8 将一个集合中的元素移动到另一个集合中:smove
11.9 集合之间求交并补集:sinter sunite sdiff
差集sdiff
交集sinter
并集sunion
12. hash详解
hash的形式:key filed vlaue,相当于java中的map集合 hash命令都是h开头
1 | 命令 说明 |
12.1 向hash中添加值:hset
12.2 得到hash中的指定filed的值:hget
12.3 得到hash中的所有值:hgetall
12.4 批量添加和获取:hmset hmget
12.5 删除指定的字段:hdel
12.6 获取hash的字段长度:hlen
12.7 判断hash中的字段是否存在:hexist
12.8 获取所有的key(字段)hkeys,获取所有的value:hvals
12.9 指定增量:hincrby
hash变更的数据 user name age,尤其是是用户信息之类的,经常变动的信息! hash 更适合于对象的存储,String更加适合字符串存储!
13. Zset详解
zset是有序不可重复的集合,zset命令都是z开头
1 | 命令 说明 |
13.1 添加数据:zadd
13.2 获取所有值,按照索引获取:zrange
13.3 获取所有值,按照score获取:zrangebyscore
13.4 移除元素:zrem
13.5 得到元素的个数:zcard
13.6 获取指定区间的成员数量:zcount
ZSET 官方 可排序SET sortSet
14. geospatial
15. bitmaps
bitmap即位存储,适用于只有两面性的内容。如:可以用bitmap存储用户是否登录,是否注册,是否打卡等等。bitmap的值只有0和1两个值。
15.1 存储数据:setbit
15.2 获取指定下标的值:getbit
15.3 统计bitmap中1的位数:bitcount
16. hyperloglogs
用于统计基数(即不重复的数据),可以用于统计网页访问量
16.1 添加:pfadd
16.2 计数:pfcount
16.3 合并:pfmerge
本文作者:jujimeizuo
本文地址: https://blog.jujimeizuo.cn/2021/09/24/redisleixing/
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0 协议。转载请注明出处!