我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Redis】入门

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Redis】入门

【Redis】入门

Redis是一个开源的、基于内存的数据结构存储器,可以用作数据库、缓存和消息中间件 Redis最常用的功能 缓存 分布式锁
  1. Redis概述
  2. Redis常用数据结构
  3. Redis删除过期数据策略
  4. Redis内存淘汰机制
  5. Redis持久化机制
  6. 缓存问题及解决方案

Redis概述

 Redis是一个开源的、基于内存的数据结构存储器,可以用作数据库、缓存和消息中间件

Redis最常用的功能

  • 缓存
  • 分布式锁
 本文介绍使用环境
  • Windows 10

  • Redis 3.0.504

如何安装Redis就不做介绍,若不想安装Redis环境,可以使用try redis尝试Redis功能 CMD 启动 Redis,打开Reids目录,执行下面命令,出现下面图片代表启动成功
redis-server redis.windows.conf

 

 

Redis常用数据结构

字符串(String)

用途

  • 存放字符串/数字
  • 常规key-value缓存应用
  • 常规计数:订单数,商品数
常用命令用途
set key value 设置指定 key 的值
get key 获取指定key的值
decr key 将指定的key的值递减1,若设置的值不是数字,报错
incr key 将指定的key的值递增1,若设置的值不是数字,报错
mget key1 [key2] 获取指定的key,返回多个值

 

哈希(Hash)

用途

  • hash 特别适合用于存储对象(用户信息,商品信息)
  • 可以修改/读取对象某个值
常用命令用途
hset key field value 设置单个对象值
hget key field value 获取的那个对象值
hmset key field1 value [field2 value2] 设置对象多个字段值
hmget 获取对象多个值 , 返回列表
hgetall 获取指定key对象字段和值

 

 

列表(List)

用途

  • 双向链表 ,支持反向查找和遍历
  • 可以添加重复数据
  • 适合存放消息列表,产品列表,订单列表等
常用命令用途
lpush key value 向链表左边推送值
rpush key value 向链表右边推送值
lpop key 链表的左边弹出值
rpop key 链表的右边弹出值
lrange key start end 链表左边指定范围内的元素 , 多用于分页
llen key 获取链表长度

 

 

集合(Set)

用途

  • 跟列表类似,集合会去重复
常用命令用途
sadd key value 添加一个元素
spop key value 随机返回一个元素
smembers key 返回集合所有成员
sunion key1 key2 返回所有给定集合的并集

 

有序集合(Sorted Set)

 用途

  • 集合中的元素能够按score进行有序排列
  • 多用于排名数据
  • score 相同情况下,按字典键值排序
常用命令用途
zadd key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
zrange key start end 返回有序集合指定范围数据
zrem key member 移除指定成员
zcard key 获取集合成员数

 

 

 

Redis删除过期数据策略

Redis删除过期数据有两种机制

定期删除 :redis默认是每隔 100ms 就随机抽取过期的数据删除

惰性删除 : 访问数据的时候检查数据是否过期

 

Redis内存淘汰机制

当遇到写入数据的时候内存不够,Redis有下面几种机制来决定如何操作

方式说明
volatile-lru 从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl 从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random 从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-lru 当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key
allkeys-random 从数据集(server.db[i].dict)中任意选择数据淘汰
noeviction 禁止删除,若超出内存报错
volatile-lfu 从已设置过期时间的数据集挑选使用频率最低的数据淘汰(Redis5.0 以后才有)
allkeys-lfu 从数据集中挑选使用频率最低的数据淘汰(Redis5.0 以后才有)

在配置文件里面打开maxmemory-policy配置项,默认是:noeviction

通常情况配合maxmemory配置设置最大内存使用

 

Redis持久化机制

Redis支持两种持久化方式

快照(snapshotting)持久化(RDB)

  • Redis可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本
  • Redis默认采用的持久化方式
  • 配置多个save配置项指定触发创建副本条件,例:save 900 1 , 900秒内至少一个Key发生变化触发创建快照
  • 缺点:若没达到触发条件,数据容易丢失

AOF(append-only file)持久化

  • 开启AOF持久化后,根据选择的方式写入AOF文件中
  • 配置appendfsync 配置项,配置同步频率
  • 缺点:可能经常发生同步,影响Redis的速度 

AOF有3种方式

方式说明
appendfsync always 每次有数据修改发生时都会写入AOF文件 ,严重降低Redis的速度
appendfsync everysec 每秒钟同步一次,显示地将多个写命令同步到硬盘
appendfsync no 让操作系统决定何时进行同步

为了兼顾数据和写入性能,用户可以考虑 appendfsync everysec 选项 ,让 Redis 每秒同步一次 AOF 文件,Redis 性能几乎没受到任何影响。

Redies默认AOF是关闭的,通过修改配置打开

 

 

Redis 4.0 对于持久化机制的优化

Redis 4.0 开始支持 RDB 和 AOF 的混合持久化(默认关闭,可以通过配置项 aof-use-rdb-preamble 开启)。

如果把混合持久化打开,AOF 重写的时候就直接把 RDB 的内容写到 AOF 文件开头。

这样做的好处是可以结合 RDB 和 AOF 的优点, 快速加载同时避免丢失过多的数据。

当然缺点也是有的,AOF 里面的 RDB 部分是压缩格式不再是 AOF 格式,可读性较差。

由于Windows的版本最新只有3.0,这个就没法验证

缓存问题及解决方案

缓存雪崩

同一时间大面积缓存失效,大量请求落到数据库上

解决

  • 缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效

缓存穿透

请求缓存不存在的数据,然请求穿透缓存到数据库,通常是黑客攻击

解决

  • 采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤
  • 访问key未在DB查询到值,也将空值写进缓存,但可以设置较短过期时间
  • 采用签名验证提交数据

缓存击穿

缓存过期的一刻,同时有大量的请求,由于缓存失效,导致请求都落到DB

解决

  • 单体使用互斥锁(mutex key)
  • 分布式使用setnx
  • 双重校验访问缓存数据(Double Check),就是线程安全的单例模式

转发请标明出处:https://www.cnblogs.com/WilsonPan/p/12635605.html

参考文章

Command reference – Redis

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Redis】入门

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【Redis】入门

Redis是一个开源的、基于内存的数据结构存储器,可以用作数据库、缓存和消息中间件 Redis最常用的功能 缓存 分布式锁 Redis概述Redis常用数据结构Redis删除过期数据策略Redis内存淘汰机制Redis持久化机制缓存问题及解决方案
【Redis】入门
2019-10-29

redis 入门一

一、redis 简介1、什么是 redis?  redis 是一个开源免费的高性能的 key - value 数据库。  支持数据持久化,即可以将内存的数据存储在磁盘中,重启服务后可以再次加载磁盘中的数据并使用。  支持多种类型,比如:String(字符串)、
redis 入门一
2016-07-05

Redis系列(一)Redis入门

NoSQL 开发中或多或少都会用到,也是面试必问知识点。最近这几天的面试每一场都问到了。但是感觉回答的并不好,还有很多需要梳理的知识点。这里通过几篇 Redis 笔记整个梳理一遍,后面再加上面试题。Redis 系列:1. Redis系列(一)Redis入门2.
Redis系列(一)Redis入门
2020-02-02

Redis入门(4) - 排序

SORT命令LIMIT参数BY参数GET参数STORE参数排序性能优化很多场合需要对元素进行排序,这时除了使用有序集合外,还可以借助Redis提供的SORT命令来排序。SORT命令SORT命令可以对列表类型、集合类型和有序集合类型的键进行排序。 SORT ke
Redis入门(4) - 排序
2019-03-07

Redis入门-什么是NoSQL

原文:https://www.cnblogs.com/xxhxs-21/p/14630103.html
Redis入门-什么是NoSQL
2021-07-14

Redis入门(1) - 使用Cli

* [在Docker中使用Redis]* [Redis-Cli]* [命令的返回值类型]* [Redis中的多数据库]* [基础命令]Redis是REmote DIctionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过
Redis入门(1) - 使用Cli
2017-07-26

Redis入门(6) - Lua脚本

Lua基本语法表类型函数Redis执行脚本KEYS与ARGV沙盒与随机数脚本相关命令原子性和执行时间Lua是一种高效的轻量级脚本语言,能够方便地嵌入到其他语言中使用。在Redis中,借助Lua脚本可以自定义扩展命令。Lua基本语法数据类型空(nil),没有赋值
Redis入门(6) - Lua脚本
2014-06-17

Redis入门(2) - 数据类型

Redis中的数据类型字符串散列列表集合有序集合Redis中的数据类型Redis定义了这几种数据类型:string(字符串)hash(散列)list(列表)set(集合)zset(有序集合)后面会介绍它们各自的特点和使用场景。可以用TYPE命令来获取键的类型。
Redis入门(2) - 数据类型
2017-07-10

Redis入门(5) - 消息通知

使用列表实现任务队列优先级队列按照规则订阅Redis也可以作为任务队列。任务队列顾名思义,就是“传递任务的队列”。任务队列与消息队列什么区别呢?任务队列是逻辑模型,而消息队列是通信模型,两者是不同层次的抽象,用消息队列可以实现任务队列。与任务队列进行交互的实体
Redis入门(5) - 消息通知
2016-07-22

Redis入门(3) - 事务和缓存

事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次执行这些命令。事务的使用方式> MULTIOK> SADD key1 1QUEUED> SADD key2 2QUEUED> EXEC1) (integer) 12) (integer)
Redis入门(3) - 事务和缓存
2020-11-05

Redis入门 - 数据类型:Stream详解

Redis5.0 中还增加了一个数据类型Stream,它借鉴了Kafka的设计,是一个新的强大的支持多播的可持久化的消息队列。@pdaiRedis入门 - 数据类型:Stream详解为什么会设计StreamStream详解Stream的结构增删改查独立消费消费
Redis入门 - 数据类型:Stream详解
2017-07-13

redis的入门知识点有哪些

这篇文章给大家分享的是有关redis的入门知识点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类ke
2023-06-28

编程热搜

目录