乐趣区

关于redis:Redis

定义与根本信息

Redis 官网:https://redis.io

NoSQL 型数据库,以 key,value 的模式存储数据

Redis 可实现一秒写 8 万次,读 11 万次,将所有数据都放在内存中,读写都在一个 CPU 上,是单线程的

共 16 个数据库,默认应用第 0 个

默认端口:6379

数据类型

五种根本数据类型:

String, List, Set, Hash, ZSet

三种非凡数据类型:

Geospatial, Hyperloglog, Bitmap

作用

数据库,缓存,MQ

根本数据类型常用命令

连贯 redis

redis-cli -h host -p port -a password

String 类型命令

# 设置键值对
SET key value

# 获取键值对
GET key value

# set if not exists
SETNX key value

# set with expire
SETEX key time value

List 类型命令

list 相当于一个双端队列

# 将一个值或多个值,插入到列表头部
LPUSH key value
LPUSH key value1
LPUSH key value2

# 获取 list,蕴含指定区间的值
LRANGE key start end

# 将一个值插入到列表尾部
RPUSH key value3

# 获取列表长度
LLEN key

# 移除列表中指定个数的值, 以下例子移除了 key 中 count 个 value
LREM key count value

# 将列表中指定下表值替换成另一个值
LSET key index value

# 将值插入到列表当中,位于值 pivot 之前或之后
LINSERT key BEFORE|AFTER pivot value

set 类型命令

此类型中不能呈现反复的 value

通过哈希表实现,增加,删除,查找的复杂度都是 O(1)

# 增加键值对
SADD key value

# 返回 set 中所有的成员
SMEMBERS key

# 判断成员 value 是否是 set 中的值
SISMEMBER key value

# 获取成员个数
SCARD key value

# 移除 set 中指定成员
SREM key value

# 随机抽选成员
SRANDMEMBER key

# 两个 set 的差集
SDIFF key1 key2

# 两个 set 的交加
SINTER key1 key2

# 两个 set 的并集
SUNION key1 key2

Hash 类型命令

相当于 Map 汇合,key-map 对应,实质和 String 类型没有太大差别,map 在 redis 中示意为一个 field(字段)

# 将 key 中的字段 field 的值设为 value
HSET key field value

# 同时设置 key 中多个字段的多个值
HMSET key field1 value1 field2 value2

# 获取 key 中 field1 字段的值
HGET key field1

# 获取 key 中 field1 和 field2 的值
HMGET key field1 field2

# 以列表模式返回哈希表的字段及字段值
HGETALL key

# 获取 key 中所有的值
HVALS key

# 为 key 中的指定字段的整数值加上增量 increment
HINCRBY key field increment

ZSet 类型命令

有序汇合,sorted set

ZSet 中不容许呈现反复的值,每个成员都会关联一个 double 类型的分数,所以能够排序

# 向有序汇合增加一个或多个成员
ZADD key score1 member1 score2 member2

# 获取成员数量
ZCARD key 

# 获取分数在 min 和 max 之间的成员,升序排列
ZRANGEBYSCORE key min max

# 获取分数在 min 和 max 之间的成员,降序排列
ZREVRANGEBYSCORE key max min

# 移除有序汇合中给定的分数区间的所有成员
ZREMRANGEBYSCORE key min max

# 通过字典区间返回有序汇合的成员
ZRANGEBYLEX key min max

不罕用数据类型介绍

Geospatial

个别用于计算地理位置之间的间隔,需存储经纬度信息和名称(GEOADD),利用命令(GEODIST)可返回两地之间的间隔。

Hyperloglog

基数统计,返回汇合中不反复的元素。

只计算基数,不存储元素。

Bitmap

位存储,用一个 bit 位来标记某个元素对应的 Value,Key 示意该元素,节俭存储空间。

利用:统计信息

Redis 事务

MULTI

标记着一个事务的开始,redis 将后续的命令放入队列中,保障原子性。

EXEC

执行一个事务队列中的所有命令

DISCARD

革除一个事务队列中的所有命令

WATCH

监督某个事务(在事务需按条件执行时),设置在给定的 key 上

UNWATCH

勾销 WATCH 命令对所有 key 的监督

数据长久化的两种形式

RDB

Redis Database

在指定的工夫距离内将内存中的数据集快照(snapshot)写入磁盘

实现

独自创立一个子过程(fork)进行长久化,写入一个临时文件(dump.rdb),待长久化过程完结,再用这个临时文件替换上次长久化好的文件

触发机制
  1. save 规定,指定当 m 秒内产生 n 次变动时,会触发 bgsave
  2. flushall
  3. 退出 redis
长处
  1. 适宜大规模数据恢复
  2. 对数据完整性要求不高
毛病
  1. 须要肯定工夫距离操作,如果 redis 意外宕机,最近批改的数据失落
  2. fork 过程会占用肯定空间

AOF

Append-only File

将所有命令都记录下来(appendonly.aof),默认不开启,如需开启则将 appendonly 改为 yes,重启 redis 失效

长处
  1. 每一次批改都同步,文件的完整性进步,爱护数据不失落
  2. 写入性能比拟好
毛病
  1. AOF 日志文件通常比 RDB 数据快照文件大,复原速度慢
  2. 运行效率低

缓存穿透、击穿、雪崩

缓存穿透

定义 :用户一直发动申请,而缓存和数据库中都没有该数据,导致数据库压力过大

解决方案 :减少校验

缓存击穿

定义 :在高并发的状况下,用户个体取数据,缓存中一条数据工夫到期,只能同时去数据库中取,导致数据库压力过大

解决方案 :加互斥锁,设置缓存不过期

缓存雪崩

定义 :缓存中数据大批量到过期工夫,很多数据都查问不到,只能去数据库中取,导致数据库压力过大

解决方案 :缓存过期工夫随机设置或设置缓存不过期,将数据放在不同数据库中

退出移动版