百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis概述(redis 简介)

mhr18 2025-03-28 18:38 37 浏览 0 评论

NoSQL概述

NoSQL是not only SQL非关系型数据库的简称。

web1.0采用关系型数据库,web2.0主打交互型,关系型数据库已经不满足下列需求:

  • high performance 高并发读写
  • huge storage 海量数据的高效率存储和访问
  • high scalability && high availability 高可用扩展性和高可用性

因此非关系型数据库应运而生,主流的NoSQL产品包括redis mongoDB couchDB等,大致可分为四大类:

  • 键值存储(如:redis):快速查询、存储数据缺少结构化
  • 列存储:快速查询,可扩展性强;功能相对局限
  • 文档数据库(如:mongoDB):数据结构不需要很严格;查询性不是很高,缺乏统一的查询的语法
  • 图形数据库:图结构相关算法;不容易做分布式的集群方案

NoSQL的特点是:易扩展、灵活的数据模型、大数据量、高性能、高可用

Redis的概述

Redis是c语言开发的、开源的、高性能的、键值对的NoSQL型数据库,其支持的类型包括:字符串类型、列表类型、有序集合类型、集合类型、散类类型。

官方给出的Redis性能数据:写QPS:8w;读QPS:11w

Redis常用于下列应用场景:缓存、任务队列(秒杀、抢购)、网站访问统计、应用排行榜、数据过期处理、分布数集群架构中的session管理。

Redis的数据类型

字符串String

  1. 二进制安全的,也就是说存入和获取到的数据是相同
  2. value长度的最大是512M

常用命令:

  • 赋值: set/getset
  • 取值:get
  • 删除:del
  • 扩展命令: append(追加字符串)
  • 数值增减: incr/decr/incrby/decrby

哈希hash

  1. String key和Stirng value的map容器
  2. 每一个Hash可以存储4294967295个键值对

常用命令:

  • 赋值: hset /hmset
  • 取值:hget/hmget/hgetall
  • 删除:hdel/del
  • 扩展命令:hexist(判断是否存在字段值)/hlen(获取所有字段的个数)/hkeys(获取所有字段的名称)/hvals(获取所有字段的值)
  • 增加数字:hincrby/

字符串列表list

常用与组件间消息的交互

  1. ArrayList使用数组方式:根据索引查询速度快,但是增删操作慢
  2. LinkedList使用双向链接的方式:增删操作速度快,但是查询较慢

常用命令:

  • 两端添加:lpush(左侧插入)/rpush(右侧插入)-->>生产者
  • 两端弹出:lpop(左端弹出)/rpop(右端弹出)-->>弹出后就没有该元素,类似于删除。-->>消费者
  • 查看列表:lrange
  • 获取列表元素的个数:llen(查看列表元素个数)
  • 扩展命令:lpushx(仅当列表名存在时,才会在列表头部执行插入操作)/rpushx(仅当列表名存在时,才会在列表尾部执行插入操作)/lrem {listname} {n} {value}(从头开始删除n个值为value的操作)/lrem {listname} -{n} {value}(从后往前开始删除n个值为value的操作)/lrem {listname} 0 {value}(删除listname中所有值为value的操作)/lset (修改某个角标值)/linset {listname} before(after) {value} {value1}(在第一个值为value的角标前(后),增加一个value1)/rpoplpush {list} {list2}(将链表list1中尾部的值弹出并添加到list2的头部:使用场景:当消费者从list1中pop出数据消费时,有可能处理失败,导致数据丢失,为了避免这个问题,当消费者取出数据后,将该数据缓存到另一个列表中,待消费者确认完成数据处理后才删除;也可以做多个列表,成功的存储一个、失败的存储一个,用于做日志追踪等后续操作)

字符串集合set

  1. 不允许出现重复的元素(区别于list)
  2. 最大元素数是4294967295

常用命令:

  • 添加/删除元素:sadd/srem/
  • 获取集合中的元素:smenbers/sismember(判断元素是否存在)
  • 集合中的差集运算:sdiff {name1} {names}(求name1中有,但是name2没有的所有值)
  • 集合中的交集运算:sinter
  • 集合中的并集运算:sunion
  • 扩展命令:scard(求集合中元素的个数)/srandmember(随机返回集合中的一个值)/sdiffstore {name1} {name2} {name3}(把name2和name3中的差集存入到name1)/sinterstore {name1} {name2} {name3}(把name2和name3中的交集存入到name1)/sunionstore {name1} {name2} {name3}(把name2和name3中的并集存入到name1)

使用场景:

  • 跟踪一些唯一性的数据
  • 用于维护数据对象之间的关联数据

有序字符串集合sorted set

  1. sorted set和set的区别:sorted set的成员都有一个权值,redis根据这个权值进行排序
  2. sorted set中的成员在集合中的位置都是有序的,能高效访问

使用场景:

  • 微博热点
  • 游戏积分排行榜
  • 构建索引数据

常用命令:

  • 添加元素:zadd
  • 获得元素:zscore(查询元素对应的权值)/zcard(查询表中元素的个数)
  • 删除元素:zrem
  • 范围查询:zrange {name1} 0 -1 [withscores](获取所有元素,并按权值从低到高返回,如果加了withscores,则返回的值包括权值)/zrevrange {name1} 0 -1 [withscores](获取所有元素,并按权值从高到低返回,如果加了withscores,则返回的值包括权值)/zremrangebyrank {name1} 0 4(按照范围删除元素)/aremrangebyscore {name1} {score1} {score2}(按照权值范围删除元素}
  • 扩展命令:zrangebyscore {name1} {score1} {score2} [withscores] [limit {limit0} {limit1}](查询权值范围内的所有元素,并按升序排列输出,如果加了withscores,则返回的值包括权值,如果加了limit,则只返回前limit2个数的元素)/zincrby {name1} {value} {score}(为指定value元素的权值加上score)/zcount(查询权值范围内的个数)

keys的通用操作

key的定义:

  • 不要太长(最好不要超过1024个Byte,消耗内存,降低查找效率)
  • 不要太短,提高可读性
  • 统一的命名规范

常用命令:

  • 获取所有keys:keys */ keys {name?}
  • 查询某个key是否存在:exists (存在返回1,否则返回0)
  • 重命名:rename
  • 设置过期时间:expire (时间单位是秒)/ttl(查看剩余过期时间,如果没设置,则返回-1)
  • 获取指定key的类型:type

Redis的特性

多数据库

  • 一个redis实例可以包含多个数据库,最多可以有16个数据库,默认链接第0个数据库,通过select {sq}选择对应的数据库
  • move {key1} {sq1}:将当前数据库下的{key}移到{sq1}数据库下

redis事务

  • multi(开启事务)
  • exec(事务提交)
  • discard(事务回滚)

Redis的持久化

RDB方式

Redis默认支持的持久化方式,是在指定的时间间隔内将内存中的数据和快照持久化硬盘

优势:

  • 整个redis数据库将只包含一个文件,方便文件备份,便于灾备
  • 性能最大化,异步持久化,避免主线程处理I/0操作

劣势:

  • 可能出现时间间隔内的数据丢失
  • 由于是由子进程完成I/O操作,当数据集比较大时,可能导致整个redis服务卡顿

配置:

#10个key更新了,5分钟保存一次,10000个key更新了,每1分钟保存一次。主动调用SAVE()会阻塞所有客户端!一般是BGSAVE异步的。

#save 900 1

#save 300 10

#save 60 10000

AOF方式

该方式以日志的形式记录redis的每一个操作,redis重启时,会读取该日志文件,并重新构建数据库

优势:

  • 更高的数据安全性,每秒同步(异步完成)、每修改同步(同步完成、效率较低)和不同步
  • 日志采用append方式,避免对原日志的影响
  • 如果日志过大,可以启动重写机制
  • 日志格式清晰,方便阅读,友好性较高

劣势:

  • 同步相同量的数据,AOF的数据量比RDB大
  • AOF运行效率低于RDB

配置:

# 默认redis异步的dump数据到disk。但如果断电了,那么就会丢失一部分数据了(根据save的配置)。

# AOF提供更好模式。比如用默认的AOF,redis只丢失最近一秒的数据(断电情况),或者最后一个write操作(redis自身错误,os正常)。每个write操作写一次AOF。

# 当AOF文件太大了,redis会自动重写一个aof文件出来。

# AOF和RDB持久化可以同时启用。redis会优先读AOF恢复数据。

# Please check http://redis.io/topics/persistence for more information

appendonly yes

# 默认文件名

appendfilename "appendonly.aof"

# fsync()三种:

# no:让OS托管,这样更快。

# always:每次write都刷到log,慢,最安全。

# everysec:每秒一次flush。(默认)

appendfsync always

RDB方式 + AOF方式

AOF和RDB持久化可以同时启用。Redis会优先读AOF恢复数据。

相关推荐

【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...

Pure Storage推出统一数据管理云平台及新闪存阵列

PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...

对Java学习的10条建议(对java课程的建议)

不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...

SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!

官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...

JDK21有没有什么稳定、简单又强势的特性?

佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...

「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了

在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...

Java面试题及答案最全总结(2025版)

大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...

数据库日常运维工作内容(数据库日常运维 工作内容)

#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...

分布式之系统底层原理(上)(底层分布式技术)

作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...

oracle 死锁了怎么办?kill 进程 直接上干货

1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...

SpringBoot 各种分页查询方式详解(全网最全)

一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...

《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略

《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...

LoadRunner(loadrunner录制不到脚本)

一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...

Redis数据类型介绍(redis 数据类型)

介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...

RMAN备份监控及优化总结(rman备份原理)

今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...

取消回复欢迎 发表评论: