Redis不止能存储字符串,还有List、Set、Hash、Zset,用对了能给你带来哪些优势?

文章目录

  • Redis五大数据类型的应用场景
    • 一、String
    • 二、Hash
    • 三、List
    • 四、Set
    • 五、Zset

我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。跑过十五公里、徒步爬过衡山、有过三个月减肥20斤的经历、是个喜欢躺平的狠人。

拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、Spring MVC、SpringCould、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RockerMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。有从0到1的高并发项目经验,利用弹性伸缩、负载均衡、报警任务、自启动脚本,最高压测过200台机器,有着丰富的项目调优经验。

经过多年在CSDN创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续在明年出版。这些书籍包括了基础篇、进阶篇、架构篇的《Java项目实战—深入理解大型互联网企业通用技术》,以及《解密程序员的思维密码–沟通、演讲、思考的实践》。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!

以梦为马,不负韶华

希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

  • 博客主页: 我是廖志伟
  • 开源项目:java_wxid
  • 哔哩哔哩:我是廖志伟
  • 个人社区:幕后大佬
  • 个人微信号SeniorRD

在这个美好的时刻,本人不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

CSDN

Redis不止能存储字符串,还有List、Set、Hash、Zset,用对了能给你带来哪些优势?_第1张图片

Redis五大数据类型的应用场景

Redis是一个高性能的key-value型数据库,它支持多种数据类型,包括字符串(String)、散列(Hash)、列表(List)、集合(Set)和有序集合(Zset)。每种数据类型都有自己的特点和应用场景,在实际开发中都有着广泛的应用。下面将分别介绍各个数据类型的应用场景以及举例说明。

一、String

String数据类型是Redis中最基本的数据类型,它可以存储任意类型的字符串,包括数字和JSON格式的字符串。在实际开发中,String数据类型的应用场景非常广泛,比如我们经常说到的分布式锁,就是通过setnx实现的。下面我们将详细介绍String数据类型的应用场景和例子:

  1. 分布式锁

在分布式系统中,为了避免多个客户端同时修改同一个数据,我们需要使用锁来保证数据的并发访问。其中最常见的就是分布式锁,它可以实现对资源的独占访问。Redis中可以通过setnx命令来实现分布式锁,如果返回的是1,说明获取锁成功,否则获取锁失败。下面是使用setnx实现分布式锁的例子:

SET key value NX EX max_lock_time

2.计数器

在对网站访问次数进行统计时,我们可以使用Redis的incr命令实现。它可以对指定的key进行自增操作,并返回自增后的值。下面是使用incr实现计数器的例子:

INCR page_view_count

二、Hash

Hash数据类型是Redis提供的一种特殊的字符串类型,它可以存储多个键值对,每个键值对都是一个字符串。在实际开发中,Hash数据类型的应用场景也非常广泛,比如我们经常会使用Hash存储用户信息、商品信息等。下面我们将详细介绍Hash数据类型的应用场景和例子:

1.购物车

在电商项目中,购物车是一个非常重要的业务模块,我们可以使用Redis的Hash数据类型来实现购物车功能。比如,我们可以使用hset命令添加商品,hlen命令获取商品总数,hdel命令删除商品,hgetall命令获取购物车所有商品。下面是使用Hash实现购物车的例子:

HSET cart:item1 id 1 name 'item1' price 10
HSET cart:item2 id 2 name 'item2' price 20
HLEN cart
HDEL cart:item1
HGETALL cart

2.缓存对象

在缓存对象时,有时需要修改多个字段,而不是单个字段,这时我们可以使用Redis的Hash数据类型来存储对象。比如,我们可以使用hset命令添加对象,hmget命令获取对象的多个字段,hset命令设置对象的多个字段。下面是使用Hash实现缓存对象的例子:

HSET user:1 name 'Tom' age 18 gender 'Male'
HMGET user:1 name age gender
HSET user:1 name 'Jerry' age 19 gender 'Female'

三、List

List数据类型实际上是一个简单的字符串列表,按照插入顺序排序。它可以添加一个元素到列表的头部或尾部,并通过lpop和rpop命令弹出列表的元素。在实际开发中,List数据类型的应用场景也很广泛,比如我们经常会使用List来实现消息队列、文章列表等。下面我们将详细介绍List数据类型的应用场景和例子:

1.文章发布

在文章发布过程中,我们需要按照发布时间的先后顺序来展示文章列表。这时我们可以使用Redis的List数据类型来存储文章列表。比如,我们可以使用lpush和rpop命令来实现先进先出的队列。下面是使用List实现文章发布的例子:

LPUSH article_list article1
LPUSH article_list article2
RPUSH article_list article3
LRANGE article_list 0 -1

2.微博消息

在微博消息的展示过程中,我们需要按照发布时间的先后顺序来展示微博消息。这时我们可以使用Redis的List数据类型来存储微博消息列表。比如,我们可以使用lpush和lpop命令来实现先进后出的栈。下面是使用List实现微博消息的例子:

LPUSH weibo_list weibo1
LPUSH weibo_list weibo2
LPOP weibo_list

四、Set

Set数据类型是Redis提供的一种无序的集合,它可以存储多个字符串值,并且不允许重复。在实际开发中,Set数据类型的应用场景也非常广泛,比如我们经常会使用Set来实现全局去重、微信抽奖、微博点赞、收藏、标签等功能。下面我们将详细介绍Set数据类型的应用场景和例子:

1.全局去重

在实际开发中,经常需要对数据进行去重处理,这时我们可以使用Redis的Set数据类型来实现全局去重。比如,我们可以使用sadd和smembers命令来向Set中添加元素并获取所有元素。下面是使用Set实现全局去重的例子:

SADD user_list user1
SADD user_list user2
SADD user_list user3
SMEMBERS user_list

2.微信抽奖

在微信抽奖过程中,我们需要保证每个用户只能抽中一次奖品。这时我们可以使用Redis的Set数据类型来实现微信抽奖。比如,我们可以使用sadd和spop命令来抽奖并移除元素。下面是使用Set实现微信抽奖的例子:

SADD prize_list prize1
SADD prize_list prize2
SADD prize_list prize3
SPOP prize_list

五、Zset

Zset数据类型是Redis提供的一种有序集合,它可以存储多个字符串值,并且每个字符串都有一个分数。在实际开发中,Zset数据类型的应用场景也非常广泛,比如我们经常会使用Zset来实现排行榜、金币排名等功能。下面我们将详细介绍Zset数据类型的应用场景和例子:

1.排行榜

在实现排行榜功能时,我们需要按照分数的高低顺序来展示排名列表。这时我们可以使用Redis的Zset数据类型来存储排行榜。比如,我们可以使用zadd命令向Zset中添加元素并指定分数,使用zrange命令获取排行榜。下面是使用Zset实现排行榜的例子:

ZADD rank_list 100 Tom
ZADD rank_list 200 Jerry
ZADD rank_list 300 Bob
ZADD rank_list 400 Amy
ZRANGE rank_list 0 -1 WITHSCORES

2.金币排名

在金币排名过程中,我们需要按照用户金币数量的高低顺序来展示排名列表。这时我们可以使用Redis的Zset数据类型来存储金币排名。比如,我们可以使用zadd命令向Zset中添加用户并指定金币数量,使用zrevrange命令获取排名列表。下面是使用Zset实现金币排名的例子:

ZADD coin_list 1000 Tom
ZADD coin_list 2000 Jerry
ZADD coin_list 3000 Bob
ZADD coin_list 4000 Amy
ZREVRANGE coin_list 0 -1 WITHSCORES

以上就是Redis五大数据类型的应用场景和例子,包括String、Hash、List、Set和Zset。开发者可以根据不同的需求选择合适的数据类型,并结合Redis丰富的命令来实现自己的业务逻辑。

CSDN

如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

  • 博客主页: 我是廖志伟
  • 开源项目:java_wxid
  • 哔哩哔哩:我是廖志伟
  • 个人社区:幕后大佬
  • 个人微信号SeniorRD

博主的人生感悟和目标

  • 程序开发这条路不能停,停下来容易被淘汰掉,吃不了自律的苦,就要受平庸的罪,持续的能力才能带来持续的自信。我本身是一个很普通程序员,放在人堆里,除了与生俱来的盛世美颜,就剩180的大高个了,就是我这样的一个人,默默写博文也有好多年了。
  • 有句老话说的好,牛逼之前都是傻逼式的坚持,希望自己可以通过大量的作品、时间的积累、个人魅力、运气、时机,可以打造属于自己的技术影响力。
  • 内心起伏不定,我时而激动,时而沉思。我希望自己能成为一个综合性人才,具备技术、业务和管理方面的精湛技能。我想成为产品架构路线的总设计师,团队的指挥者,技术团队的中流砥柱,企业战略和资本规划的实战专家。
  • 这个目标的实现需要不懈的努力和持续的成长,但我必须努力追求。因为我知道,只有成为这样的人才,我才能在职业生涯中不断前进并为企业的发展带来真正的价值。在这个不断变化的时代,我必须随时准备好迎接挑战,不断学习和探索新的领域,才能不断地向前推进。我坚信,只要我不断努力,我一定会达到自己的目标。

你可能感兴趣的:(#,重要的知识点,redis,list,哈希算法,List,Set,Hash,Zset)