• 学redis看这里就行了


    Redis 介绍

    Redis 是什么?

    • Redis 是一个开源(BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件;
    • Redis 支持多种类型的数据结构,如 字符串(strings),散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) ,范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询;
    • Redis 内置了复制(replication),LUA 脚本(Lua scripting),LRU 驱动事件(LRU eviction),事务(transactions)和不同级别的 磁盘持久化(persistence);
    • Redis 通过 哨兵(Sentinel) 和自动分区(Cluster)提供高可用性(high availability)。

    Redis的特性

    • 速度快
      • 单节点读 110000次/s,写81000次/s
      • 数据存放内存中
      • 用 C 语言实现,离操作系统更近
      • 单线程架构,6.0 开始支持多线程(CPU、IO 读写负荷)
    • 持久化
      • 数据的更新将异步地保存到硬盘(RDB 和 AOF)
    • 多种数据结构 - 不仅仅支持简单的 key-value 类型数据,还支持:字符串、hash、列表、集合、有序集合,
    • 支持多种编程语言
    • 功能丰富
      • HyperLogLog、GEO、发布订阅、Lua脚本、事务、Pipeline、Bitmaps,key 过期
    • 简单稳定
      • 源码少、单线程模型
    • 主从复制
    • Redis 支持数据的备份(master-slave)与集群(分片存储),以及拥有哨兵监控机制。
    • Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作合并后的原子性执行。

    Redis 典型使用场景

    • 数据缓存
    • 计数器
    • 消息队列
    • 排行榜
    • 社交网络

    Redis 高并发原理

    1、Redis 是纯内存数据库,一般都是简单的存取操作,线程占用的时间很多,时间的花费主要集中在 IO 上,所以读取速度快
    2、Redis 使用的是非阻塞 IO,IO 多路复用,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线程切换 时上下文的切换和竞争。
    3、Redis 采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。
    4、Redis 存储结构多样化,不同的数据结构对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据 结构加快读取的速度。
    5、Redis 采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。


    Redis 数据结构与命令使用

    Redis 的数据结构有:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集 合)。但这些只是 Redis 对外的数据结构,实际上每种数据结构都有自己底层的内部编码实现,而且是多种实现, 这样 Redis 会在合适的场景选择合适的内部编码。

    Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据。不同类型的数据结 构的差异就在于 value 的结构不一样。

    常用全局命令

    • keys:查看所有键
    • dbsize:键总数
    • exists key:检查键是否存在
    • del key [key …]:删除键
    • expire key seconds:键过期
    • ttl key: 通过 ttl 命令观察键键的剩余过期时间
    • type key:键的数据结构类型

    常用哈希命令

    • hset key field value:设置值
    • hget key field:获取值
    • hdel key field [field …]:删除 field
    • hlen key:计算 field 个数
    • hmset key field value [field value …]:批量设置 field-value
    • hmget key field [field …]:批量获取 field-value
    • hexists key field:判断 field 是否存在
    • hkeys key:获取所有 field
    • hvals key:获取所有 value
    • hgetall key:获取所有的 field-value
    • incrbyfloat 和 hincrbyfloat:就像 incrby 和 incrbyfloat 命令一样,但是它们的作 用域是 filed

    常用列表命令

    • rpush key value [value …]:从右边插入元素

    • lpush key value [value …]:从左边插入元素

    • linsert key before|after pivot value:向某个元素前或者后插入元素

    • lrange key start end:获取指定范围内的元素列表,lrange key 0 -1可以从左到右获取列表的所有元素

    • lindex key index:获取列表指定索引下标的元素

    • llen key:获取列表长度

    • lpop key:从列表左侧弹出元素

    • rpop key:从列表右侧弹出

    • lrem key count value:删除指定元素,lrem 命令会从列表中找到等于 value 的元素进行删除,根据 count 的不同 分为三种情况:

    • count>0,从左到右,删除最多 count 个元素。

    • count<0,从右到左,删除最多 count 绝对值个元素。

    • count=0,删除所有。

    • ltrim key start end:按照索引范围修剪列表

    • lset key index newValue:修改指定索引下标的元素

    • blpop key [key …] timeout 和 brpop key [key …] timeout:阻塞式弹出

  • 相关阅读:
    在.NET Framework中使用RocketMQ(阿里云版)实战【第一章】
    基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用
    Running Multiple Spring Boot Apps in the Same JVM
    谷粒商城14——订单支付(AliPay)
    虚实融合 智兴百业 | 赵捷副市长莅临拓世科技集团筹备展台指导,本月19号!拓世科技集团与您相约世界VR产业大会
    Pytest的断言与条件判断的区别
    HJ33整数与IP地址间的转换
    支付牌照缩量,分账管理系统成为了众多电商平台寻求合规的主要途径
    Qt中设置鼠标透明度的应用及示例
    LeetCode50天刷题计划(Day 12—— 电话号码的字母组合(8.40-10.40)
  • 原文地址:https://blog.csdn.net/qq_24073885/article/details/126386940