Redis基础学习笔记
一、简介
1. 技术发展
在Web1.0时代,数据访问量较小,很少涉及性能问题,在访问量增大后随之会产生CPU及内存压力,数据库的IO压力。
session存储问题,多个项目session共享存储到
- 客户端cookie中,会存在安全问题
- 存放在数据库中,大量IO效率问题
- session复制,空间浪费,节点越多浪费越多
- 缓存数据库,速度快,结构简单 ✔
解决IO压力,使用传统数据库需要进行拆分,破坏一定的业务逻辑来换取性能,对于需要大量查询的操作,放到缓存数据库中,可以减少IO的读操作
2. NoSQL数据库
2.1 NoSQL概述
NoSQL(Not Only SQL),泛指非关系型数据库。
NoSQL不依赖业务逻辑方式存储,以key-value方式存储,大大增加了扩展能力
- 不遵循SQL标准
- 不支持ACID
- 远超过SQL的性能
2.2 NoSQL适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可拓展性
2.3 NoSQL不适用场景
- 需要事务支持
- 基于sql的结构化查询存储
2.4 Redis相关知识介绍
- 端口号默认6379
- 默认16个数据库,下标0开始,默认0号库
- 使用select
来切换数据库 如:select 8 - 统一密码,所有库密码相同
- dbsize 查看当前数据库key数量
- flushdb 清空当前库
- flushall 通杀所有库
- Redis是单线程+多路IO复用技术(多人在黄牛买票,买到之后通知线程)

3. Redis常用数据类型
首先启动Redis服务 指令 redis-cli
3.1 Redis键(key)操作
- keys * 查看当前库所有key (匹配keys*1)
- exists
查看key时候存在(1-存在,0-不存在) - type
查看key的类型 - del
删除指定的key - unlink
根据value选择非阻塞删除(仅keys从keysapce元数据删除,真正的删除在于后续的异步操作中) - expire
10 设定key过期时间10秒 - ttl
查看key还有多久过期,-1永不过期,-2已经过期
3.2 Redis字符串(String)
String是Redis最基本的类型,一个key对于一个value,String类型是二进制安全的,可以包含任何数据,包含图片和序列化对象,一个Redis字符串value最多512M
- set
添加键值对 - 当数据库中不存在
时,添加数据 - 当数据库中存在
时,覆盖数据
- 当数据库中不存在
- get
查询对于的键值 - append
将给定的 追加到原本的末尾,返回总长度 - strlen
获取值的长度 - setnx
只有key不存在时,才能设置值,不能进行覆盖 - incr
存储的数字增加1 - decr
存储的数字减少1 - incrby/decrby
<步长> 将key总存储的数字增减 自定义步长
Redis单命令的原子操作是不会被线程调度机制打断,得益于单线程
3.3 Resid列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素至列表的头部或尾部
Redis列表的底层是个双向链表,对两端的操作性能很高,通过索引下标操作中间性能较差