首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

redis 学习

一、基础概念

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key - Value数据库,并提供多种语言的API。它将数据存储在内存中,读写速度非常快。

二、优势

  1. 高性能
    • 由于数据存储在内存中,数据的读取和写入速度极快,例如简单的键值对查询可以在微秒级完成。
  • 丰富的数据结构
    • 支持字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)、哈希(Hash)等多种数据结构。比如可以用列表来实现消息队列功能。
  • 持久化
    • 可以将内存中的数据定期保存到磁盘或者记录修改操作,以防止数据丢失。
  • 分布式支持
    • 通过Redis Cluster等技术可以实现数据的分布式存储和处理。

三、类型(数据结构类型)

  1. 字符串(String)
    • 可以存储简单的键值对,如用户的登录状态(键为用户ID,值为登录与否的标识)。
  • 列表(List)
    • 是一个有序的字符串元素集合,可以在头部或尾部插入和删除元素。例如实现一个简单的消息队列,新消息从尾部插入,消费时从头部取出。
  • 集合(Set)
    • 是无序且不重复的元素集合。可用于存储用户的关注列表等场景。
  • 有序集合(Sorted Set)
    • 与集合类似,但每个元素都关联一个分数,可用于实现排行榜等功能。
  • 哈希(Hash)
    • 是一个键值对集合,适合存储对象类型的数据,如用户信息(键为用户ID,值为包含姓名、年龄等属性的哈希对象)。

四、应用场景

  1. 缓存
    • 在Web应用中,缓存经常访问的数据,如数据库查询结果。例如一个电商网站的商品详情页信息,可以先从Redis缓存中获取,如果缓存中没有再查询数据库并更新缓存。
  • 会话存储
    • 存储用户的会话信息,如登录状态、购物车内容等。
  • 消息队列
    • 利用列表数据结构实现简单的消息传递机制,在分布式系统中不同组件之间进行异步通信。

五、常见问题及解决方法

  1. 内存不足问题
    • 原因:如果数据量不断增长且没有合理的淘汰策略,Redis可能会耗尽内存。
    • 解决方法
      • 设置合适的maxmemory参数来限制Redis使用的最大内存。
      • 采用合适的淘汰策略,如volatile - lru(针对设置了过期时间的键,淘汰最近最少使用的键)、allkeys - lru(针对所有键,淘汰最近最少使用的键)等。
  • 数据一致性问题
    • 原因:当Redis作为缓存与数据库配合使用时,如果数据更新操作没有正确同步到缓存和数据库,可能会导致数据不一致。
    • 解决方法
      • 采用“先更新数据库,再删除缓存”的策略,在更新数据库后使缓存中的旧数据失效,下次查询时从数据库重新加载到缓存。
      • 或者使用分布式事务(如结合消息队列等方式来确保数据库和缓存操作的原子性)。
  • 连接超时问题
    • 原因:可能是网络不稳定、Redis服务器负载过高或者客户端设置的问题。
    • 解决方法
      • 检查网络连接,确保客户端和Redis服务器之间的网络畅通。
      • 调整Redis服务器的timeout参数,适当增加超时时间。
      • 在客户端优化连接池的设置,合理控制并发连接数等。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • redis学习

    yum安装redis 1.yum安装 #前提得配置好阿里云yum源,epel源 #查看是否有redis包 yum list redis #安装redis yum install redis -y #安装好...,启动redis systemctl start redis 2.检测redis是否工作 redis-cli #redis 客户端工具 #进入交互式环境后,执行ping,返回pong表示安装成功...127.0.0.1:6379> ping PONG 源码安装redis,编译安装 大家用过yum,是相当省事好用吧,为什么还要学习源码安装?.../redis-cli //redis的客户端 ./redis-server //redis的服务端 ./redis-check-aof //用于修复出问题的AOF文件 ..../redis-sentinel //用于集群管理 启动redis服务端 启动redis非常简单,直接./redis-server就可以启动服务端了,还可以用下面的方法指定要加载的配置文件: .

    67540

    Redis学习

    Redis学习 应用场景 Token令牌的生成 短信验证码的code 可以实现缓存数据的查询 帮助实现计数器 分布式锁 延迟操作(对key做时间监听,多长时间过期) 分布式消息中间件 Redis数据类型...List类型 Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边) 集合(Set) Redis 的 Set 是 String 类型的无序集合。...Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。...MySQL与Redis一致性问题 直接清除Redis的缓存,重新读取数据库 使用mq异步订阅mysql binlog实现增量同步 使用alibaba的canal 缓存击穿 热点key过期(或者没有被缓存的...) 数据库有 大量的并发redis没有缓存 过缓存穿透 解决方案 对服务接口api实现限流、用户授权、黑名单和白名单拦截; 从缓存和数据库都查询不到结果的话,一样将数据库空值结果缓存到redis中;

    27510

    redis学习 - redis 持久化

    一般情况下,redis占用内存超过20GB以上的时候,必须考虑主从多redis实例进行数据同步和备份保证可用性。 rbd保存的文件都是 dump.rdb,都是配置文件当中的快照配置进行生成的。...默认情况:RDB,AOF需要手动开启 redis.conf持久化配置说明 在redis.conf文件当中,存在如下的选项: redis.conf当中RDB的相关配置 #是否开启rdb压缩 默认开启...redis通过shutdown命令关闭服务器请求的时候,此时redis会停下所有工作执行一次save,阻塞所有客户端不再执行任何命令并且进行磁盘写入,写入完成关闭服务器。...修复速度慢一些 存在未知的bug,比如如果重写aof文件的时候突然中断,会有很多奇怪的现象 如何检查redis的性能瓶颈: redis-benchmark 官方推荐的性能测试工具,非常强大,具体的地址为...:https://www.runoob.com/redis/redis-benchmarks.html Redis-cli中调用slowlog get,作用是返回执行时间超过redis.conf中定义的持续时间的命令列表

    41620

    redis 学习(10)-- redis 慢查询

    redis 慢查询 什么是慢查询 MySQL会记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为慢查询,都记在慢查询日志里。...redis 的生命周期 客户端向Redis服务器发送命令 命令请求在请求队列中排队等待处理 执行命令 返回命令结果 ?...redis 慢查询 慢查询发生在生命周期的第三阶段,是指仅仅执行命令阶段比较慢被称为慢查询。 客户端超时不一定是慢查询,但是慢查询时是客户端超时的一个可能因素。...redis 慢查询相关配置 1. slowlog-max-len 它决定了慢查询日志最多能保存多少条日志,slow log本身是一个内存中的FIFO队列,当队列大小超过slowlog-max-len时,...slowlog len 含义:获取慢查询队列长度 slowlog reset 含义:清空慢查询队列 慢查询运维经验 slowlog-max-len 不要设置过大,默认10ms,通常设置1ms 因为Redis

    1K40

    Redis 学习笔记6 - 管理Redis

    管理Redis 1.1 config 指令 除了通过 redis.conf 文件对 Redis 进行配置外,我们还可以通过 config set 命令来个别值进行设置 config set slowlog-log-slower-than...通过使用 requirepass 设置 (用 redis.conf 文件或者 config set 命令)。...1.3 复制 ( Replication ) Redis 支持复制,意思是说,当你把数据写到一个 Redis 实例(主服务)上的时候,一个或者多个实例(从服务)将会保持和主服务同步更新。...1.4 备份(Backups) 备份 Redis 只需要简单的将 Redis 的快照拷贝到你想要的地方。默认的,Redis 把它的快照保存在名为 dump.rdb 的文件中。...1.5 扩展和 Redis 集群(Scaling and Redis Cluster) 复制是那些负荷高速成长的网站用到的第一个工具。

    39710

    Redis学习(7)

    无论是使用单线程模型还是多线程模型,都是为了更好地提升Redis的开发效率和运行性能。...哪怕我们在一个普通的 Linux 服务器上启动 Redis 服务,它也能在 1s 的时间内处理 1000000 个用户请求。...如果这种吞吐量不能满足我们的需求,更推荐的做法是使用分片的方式将不同的请求交给不同的 Redis 服务器来处理,而不是在同一个 Redis 服务中引入大量的多线程操作。...Redis 选择选择单线程模型处理客户端的请求主要还是因为CPU不是Redis服务器的瓶颈,所以使用多线程模型带来的性能提升并不能抵消它带来的开发成本和维护成本,系统的性能瓶颈也主要在网络I/O操作上;...而 Redis 引入多线程操作也是出于性能上的考虑,对于一些大键值对的删除操作,通过多线程非阻塞地释放内存空间也能减少对 Redis 主线程阻塞的时间,提高执行的效率。

    27620

    Redis学习札记

    本文是Redis入门指南的阅读笔记,同事推荐的,通过本书了解到了很多Redis支持的数据结构、很多应用场景等。基本可以做到在工作中的适当情况下应用Redis。 ?...Redis入门指南(2) 安装与配置 Mac上默认安装了redis,目前是3.2版本,通过redis-server命令启动redis。...实际开发中会发现很难为缓存设置合理的过期时间,因此可以限制Redis能够使用的最大内存,并让Redis按照一定的规则淘汰不需要的缓存键。...Redis中的管道,通过减少客户端与Redis的通信次数来提高吞吐量。...Redis允许同时开启RDB和AOF。 哨兵 在一个典型的一主多从的Redis系统中,从数据库在整个系统中起到了数据冗余备份和读写分离的作用。

    52830

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券