iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >【Redis】入门
  • 679
分享到

【Redis】入门

【Redis】入门 2019-10-29 22:10:30 679人浏览 才女
摘要

Redis是一个开源的、基于内存的数据结构存储器,可以用作数据库、缓存和消息中间件 Redis最常用的功能 缓存 分布式锁 Redis概述 Redis常用数据结构 Redis删除过期数据策略 Red

【Redis】入门

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

Redis概述

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

Redis最常用的功能

  • 缓存
  • 分布式锁
 本文介绍使用环境 如何安装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

您可能感兴趣的文档:

--结束END--

本文标题: 【Redis】入门

本文链接: https://www.lsjlt.com/news/5343.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Redis从入门到进阶
    Redis从入门到进阶   今天跟大家交流一下 Redis的一些学习材料,希望通过今天的分享,能够带领大家简单入门Redis。 首先介绍一下什么是 Redi...
    99+
    2024-04-02
  • 【Redis入门篇】| Redis的Java客户端
    目录 一: Redis的Java客户端 1. Jedis快速入门 2. Jedis连接池 3. SpringDataRedis快速入门 4. RedisSerializer配置 5. StringRedisTemplate 图书推荐 一...
    99+
    2023-09-02
    java redis 数据库
  • Redis入门教程详解
    目录Redis一、Redis基本数据结构1. 字符串 (String)2. 散列(hash)3. 列表(list)4. 集合(Set)5. 有序集合(sorted set)二、Red...
    99+
    2024-04-02
  • redis入门学习手册分享
    这篇文章主要介绍redis入门学习手册分享,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、前言在过去的几年时间里,一提到高并发、海量数据存储解决方案,我们想到的都是NoSQL数据库...
    99+
    2024-04-02
  • Redis入门知识点有哪些
    这篇文章主要介绍“Redis入门知识点有哪些”,在日常操作中,相信很多人在Redis入门知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis入门知识点有哪些”...
    99+
    2024-04-02
  • redis的入门知识点有哪些
    这篇文章给大家分享的是有关redis的入门知识点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类ke...
    99+
    2023-06-28
  • 超详细Redis入门教程——Redis 的安装与配置
    前言 本文小新为大家带来 超详细Redis入门教程——Redis 的安装与配置 相关知识,具体内容包括Redis 的安装,连接前的配置,Redis 客户端分类(包括:命令行客户端,图形界面客户端,J...
    99+
    2023-10-05
    redis java 数据库
  • 关于Redis数据库入门详细介绍
    目录1、Redis是什么?2、Redis特点:单线程为何如此快?3、redis 对比 memcached4、redis 典型应用场景:5、Redis下载与安装:Redis服务...
    99+
    2024-04-02
  • Redis数据库入门知识点有哪些
    本篇内容主要讲解“Redis数据库入门知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis数据库入门知识点有哪些”吧!1、Redis是什么?非关系型数据库:NoMsql主流的 N...
    99+
    2023-06-25
  • PHP Redis扩展入门教程:轻松实现Redis数据存储
    1、PHP Redis扩展简介 PHP Redis扩展是PHP中用于连接和操作Redis服务器的扩展。Redis是一个开源的、高性能的、分布式内存数据库,可以作为缓存、队列、数据库等使用。PHP Redis扩展使开发人员能够轻松地将Re...
    99+
    2024-02-07
    PHP Redis扩展 Redis数据存储 Redis缓存 Redis队列 Redis事务
  • springboot使用Redis作缓存使用入门教程
    1.依赖与数据库设置 <dependency> <groupId>org.springframework.boot</groupId> ...
    99+
    2024-04-02
  • Redis数据库入门基础知识有哪些
    本篇文章为大家展示了Redis数据库入门基础知识有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  Redis是一个开源的使用ANSIC语言编写、支持网络、可基...
    99+
    2024-04-02
  • Redis入门基础常用操作命令整理
    目录Redis基础一、redis是单线程二、关于数据库的常用操作1. 默认数据库2. 切换数据库3. 查看数据库大小4. 清空数据库三、关于Redis-Key的常用操作1. set ...
    99+
    2024-04-02
  • spring boot集成redis基础入门实例详解
    目录redisredis和spring bootspring boot集成redisredis使用redis在spring boot中存取数据set写入数据get读取数据模拟接口请求...
    99+
    2024-04-02
  • PHP Redis扩展实战指南:从入门到精通
    1、安装与配置 首先,您需要安装PHP Redis扩展。您可以使用PECL命令来安装它: pecl install redis 安装完成后,您需要在php.ini文件中启用Redis扩展。在php.ini文件中找到extension=r...
    99+
    2024-02-06
    PHP Redis 数据库 操作 示例
  • SpringBoot整合Redis入门之缓存数据的方法
    目录前言为什么要使用Redis呢?相关依赖配置数据库实体类RedisConfigMapperService接口Service实现类测试RedisController前言 Redis是...
    99+
    2024-04-02
  • Redis入门基础常用操作命令实例分析
    今天小编给大家分享一下Redis入门基础常用操作命令实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Redis基础Re...
    99+
    2023-06-30
  • golang入门难不难?怎么入门?
    从一位刚刚开始学习Golang的小白的角度出发,Golang入门难不难的问题一直让我非常纠结。一方面,Golang作为一门新兴的编程语言,其设计理念和语法都比传统的编程语言有所不同,对于新手来说,学习曲线会相对较陡。另一方面,由于Golan...
    99+
    2023-05-14
  • <C++> 入门
    在学习完C语言的基础上,继续开始C++的学习。 C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C++学习有一定的帮助。 1. 补充C语言语法的不足,以及C++是如何对C语言设...
    99+
    2023-08-16
    c++
  • Python入门
    ---恢复内容开始---   在这章中,我了解到了计算机的概念、Python的发展史以及Python语言的版本之间的区别,并自己安装了Python的编辑器。通过安装Python编辑器,我认识到安装软件也可以在官网上安装。     在第...
    99+
    2023-01-30
    入门 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作