Redis的基本用法以及场景分析

简介: Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

简介:

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

1、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

2、Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

3、Redis支持数据的备份,即master-slave模式的数据备份。

一、String

Redis 字符串数据类型的相关命令用于管理 redis 字符串值

类比Java:HasMap

Object -->

1、字符串(String)

  • 基本操作:
SET     --存入一个字符串键
SETNX   --存入一个字符串键,若Key存在则操作失败
GET     --获取指定Key的字符串
MSET    --批量存入字符串键
MGET    --批量获取指定Key的字符串
DEL     --删除指定Key(所有类型都可以使用此命令)
  • 应用场景:
    (1)、分布式锁:SETNX(Key, Value),释放锁:DEL(Key)

2、数值(Number)

  • 基本操作:
INCRBY Key increment      --对Key进行数值相加,key不存在则新建
DECRBY Key decrement      --对Key进行数值相减,key不存在则新建
INCR Key            --对Key进行自加1,key不存在则新建
DECR Key            --对Key进行自减1,key不存在则新建
  • 应用场景:
    (1)、文章的浏览量,视频的观看量
    (2)、全局序列

3、二进制(bit)

  • 基本操作:
GETBIT Key offset       --获取Key下标offset的值
SETBIT Key offset value     --对Key下标offset进行设值
BITCOUNT Key [start] [end]    --统计start到end位置设值为1的数量
BITOPS op destkey [key...]    --对多个key进行位计算op(AND/OR/XOR/NOT)
  • 应用场景:
    (1)、存储图片
    (2)、用户在线统计

二、HashMap

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象

类比Java:HashMap>

key - field - value 结构

  • 基本操作:
HSET      --存入一个key filed 散列结构
HSETNX      --存入一个key field,若key中filed已经存在则操作失败
HGET      --获取指定key field
HMSET     --批量存入key filed
HMGET     --批量获取key filed
HDEL      --删除指定Key filed
HINCRBY     --对key field的数值进行加减操作
  • 优点:
    (1)、将信息凝聚在一起,便于管理
    (2)、从一定上避免误操作,减少key冲突
    (3)、减少内存/IO/CPU的消耗
  • 应用场景:
    (1)、购物车功能

三、List

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

类比Java:HasMap

  • 基本操作:
LPUSH Key value [value...]      --往key的列表键中左边放入一个元素,key不存在则新建
RPUSH Key value [value...]      --往key的列表键中右边放入一个元素,key不存在则新建
LPOP Key              --从key的列表键最左端弹出一个元素
RPOP Key              --从key的列表键最右端弹出一个元素
LRANGE Key start stop       --获取列表键从start下标到stop下标的元素
BLPOP Key [Key...] timeout      --阻塞的从key的列表键最左端弹出一个元素,若列表键中不存在元素,阻塞等待{timeout}秒,若{timeout}=0,一直阻塞
BRPOP Key [Key...] timeout      --阻塞的从key的列表键最右端弹出一个元素,若列表键中不存在元素,阻塞等待{timeout}秒,若{timeout}=0,一直阻塞
  • 应用场景:
    (1)、消息队列
    (2)、新闻推荐

四、Set

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据

类比Java:HasMap

  • 基本操作:
SADD Key member [member...]     --往集合键key中存放元素,若key不存在则新建
SREM Key member [member...]     --从集合键key中删除元素
SMEMBERS Key            --获取集合键key中的所有元素
SCARD Key             --获取集合键key中的元素个数
SISMEMBER Key member        --判断{member}元素是否存在于集合键key中
SRANDMEMBER Key [count]       --从集合键key中选出{count}个元素,不从集合键key中删除
SPOP Key [count]          --从集合键key中选出{count}个元素,并且从集合键key中删除
  • 应用场景:
    (1)、抽奖
    (2)、点赞,转发,收藏
  • 集合运算:
SINTER Key [Key...]             --交集运算
SINTERSTORE destination key [key...]    --交集运算,运算结果保存在集合键destination中
SUNION Key [Key...]             --并集运算
SUNIONSTORE destination Key [Key...]    --并集运算,运算结果保存在集合键destination中
SDIFF Key [Key...]              --差集运算
SDIFFSTORE destination key [key...]     --差集运算,运算结果保存在集合键destination中
  • 应用场景:
    (1)、共同关注
    (2)、可能认识的人
    (3)、我关注的人也关注了他
    (4)、商品筛选

五、ZSet

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员

  • 基本操作:
ZADD Key score element [...]      --往有序集合键key中存放元素,若key不存在则新建
ZREM Key element [element...]     --从有序集合键key中删除元素
ZSCORE Key element            --获取有序集合键key中{element}元素的score值
ZINCRBY Key increment element     --给有序集合键key中{element}元素进行score值操作,若key不存在则新建,{element}元素不存在则新增后进行score值操作
ZCARD Key               --获取有序集合键key中元素个数
ZRANGE Key start stop [WITHSCORES]    --正序获取有序集合键key中从start下标到end下标的元素
ZREVRANGE Key start stop [WITHSCORES] --倒序获取有序集合键key中从start下标到end下标的元素
  • 集合运算:
ZUNIONSTORE destkey numkeys key [key...]  --并集运算
ZINTERSTORE destkey numkeys key [key...]  --交集运算
  • 应用场景:
    (1)、排行榜,热搜榜
    (2)、周榜,月榜,年榜
相关文章
|
8月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
894 6
|
监控 NoSQL Java
场景题:百万数据插入Redis有哪些实现方案?
场景题:百万数据插入Redis有哪些实现方案?
291 1
场景题:百万数据插入Redis有哪些实现方案?
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
378 6
|
存储 NoSQL Redis
Redis 新版本引入多线程的利弊分析
【10月更文挑战第16天】Redis 新版本引入多线程是一个具有挑战性和机遇的改变。虽然多线程带来了一些潜在的问题和挑战,但也为 Redis 提供了进一步提升性能和扩展能力的可能性。在实际应用中,我们需要根据具体的需求和场景,综合评估多线程的利弊,谨慎地选择和使用 Redis 的新版本。同时,Redis 开发者也需要不断努力,优化和完善多线程机制,以提供更加稳定、高效和可靠的 Redis 服务。
402 1
|
NoSQL 算法 安全
redis分布式锁在高并发场景下的方案设计与性能提升
本文探讨了Redis分布式锁在主从架构下失效的问题及其解决方案。首先通过CAP理论分析,Redis遵循AP原则,导致锁可能失效。针对此问题,提出两种解决方案:Zookeeper分布式锁(追求CP一致性)和Redlock算法(基于多个Redis实例提升可靠性)。文章还讨论了可能遇到的“坑”,如加从节点引发超卖问题、建议Redis节点数为奇数以及持久化策略对锁的影响。最后,从性能优化角度出发,介绍了减少锁粒度和分段锁的策略,并结合实际场景(如下单重复提交、支付与取消订单冲突)展示了分布式锁的应用方法。
978 3
|
消息中间件 NoSQL Unix
Redis的基本特性以及其基础命令用法
这只是冰山一角,Redis的强大功能和简洁的操作方法值得我们深入了解和掌握,是复杂数据问题解决的有力工具。所以,来一场有趣的Redis冒险吧!
409 6
|
缓存 NoSQL 架构师
Redis批量查询的四种技巧,应对高并发场景的利器!
在高并发场景下,巧妙地利用缓存批量查询技巧能够显著提高系统性能。 在笔者看来,熟练掌握细粒度的缓存使用是每位架构师必备的技能。因此,在本文中,我们将深入探讨 Redis 中批量查询的一些技巧,希望能够给你带来一些启发。
Redis批量查询的四种技巧,应对高并发场景的利器!
|
存储 NoSQL Java
从扣减库存场景来讲讲redis分布式锁中的那些“坑”
本文从一个简单的库存扣减场景出发,深入分析了高并发下的超卖问题,并逐步优化解决方案。首先通过本地锁解决单机并发问题,但集群环境下失效;接着引入Redis分布式锁,利用SETNX命令实现加锁,但仍存在死锁、锁过期等隐患。文章详细探讨了通过设置唯一标识、续命机制等方法完善锁的可靠性,并最终引出Redisson工具,其内置的锁续命和原子性操作极大简化了分布式锁的实现。最后,作者剖析了Redisson源码,揭示其实现原理,并预告后续关于主从架构下分布式锁的应用与性能优化内容。
597 0
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
684 8
|
缓存 监控 NoSQL
Redis 缓存穿透的检测方法与分析
【10月更文挑战第23天】通过以上对 Redis 缓存穿透检测方法的深入探讨,我们对如何及时发现和处理这一问题有了更全面的认识。在实际应用中,我们需要综合运用多种检测手段,并结合业务场景和实际情况进行分析,以确保能够准确、及时地检测到缓存穿透现象,并采取有效的措施加以解决。同时,要不断优化和改进检测方法,提高检测的准确性和效率,为系统的稳定运行提供有力保障。
349 5