Redis基础学习笔记

一、简介

1. 技术发展

在Web1.0时代,数据访问量较小,很少涉及性能问题,在访问量增大后随之会产生CPU及内存压力,数据库的IO压力。

session存储问题,多个项目session共享存储到

  1. 客户端cookie中,会存在安全问题
  2. 存放在数据库中,大量IO效率问题
  3. session复制,空间浪费,节点越多浪费越多
  4. 缓存数据库,速度快,结构简单 ✔

解决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列表的底层是个双向链表,对两端的操作性能很高,通过索引下标操作中间性能较差