【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!
博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!
吾等采石之人,应怀大教堂之心,愿大家奔赴在各自的热爱里…
一、文章序言
Redis概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
为什么会出现Redis呢?它的到来是为了解决什么样的问题?
Redis 是一个NOSQL类型数据库,是为了解决高并发、高扩展,大数据存储等一系列的问题而产生的数据库解决方案,是一个非关系型的数据库。
Redis中常见的数据类型我们一定要知道
如果你是redis的作者你会给redis设计什么数据类型呢?
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
我知道很抽象,为此整理了一个思维导图,我们对比一下Java中的数据结构,每一个数据结构的存在都有特定的应用场景
Redis数据存储格式
Redis自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储
数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串
本篇主要详解string类型简单使用和业务场景
二、常用命令
Redis中string 类型
存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
Key是String类型的,Value是Java中所有的基本类型都可以。
string 类型数据的基本操作
添加/修改数据
set key value
获取数据
get key
删除数据
del key
建议初学者自己安装Redis测试,此处是截图demo
设置key-value,然后更加key获取value
string 类型数据的基本操作
添加/修改多个数据
mset key1 value1 key2 value2
获取多个数据
mget key1 key2
批量设置的语法前面带个m,像我第一次打就犯错了
获取数据字符个数(字符串长度)
strlen key
追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
append key value
看看案例在手比较容易理解
del key [key...] //删除一个或多个键值对
setnx key value //存入一个不存在的键值对,如果key不存在,同set;若存在,则不做任何操作。
将key中存储的数字加1
INCR key
将key中存储的数字减1
DECR key
将key中所存储的值加上increment
INCRBY key increment
将key中所存在的值减去decrement
DECRBY key decrement
如上内容建议初学者在客户端实践
三、业务场景
Redis中string的使用场景根据它自身特点决定
常见的有如下几种情况,我简单举例说明
业务场景
1、缓存功能:部分数据第一次查询查询数据库,查询完后存入redis中,后续再获取可以从redis中获取
2、验证码:网站登录中常有验证码,我们可以用此数据类型,手机号作为key,验证码作为value存储在redis中,设置过期时间,后续如果用户输入验证码,我们从redis中取值对比,如果过期则无效
set 13030303300 123456
3、数字计数:比如帖子有点赞数,可以以帖子的id作为key,点赞总数作为value; 还比如访问量等,用户每次访问,访问总数可以加一,记录在redis中; 抖音的关注数,当大V注册抖音的时候,关注数会在非常短的时间内增加,这里我们可以用redis记录,一段时间后同步到mysql等数据库中;
user-id:10086:fans → 123456
user-id:10086:blogs → 999
user-id:10086:likes → 888
4、存储对象:以json形式存储,常见key=id value=json格式数据,如商品id为key,商品信息为value
{"id":10086,"name":"辰兮要努力","fans":123456,"blogs":999, "likes":888}
介绍一个之前接触过的案例:电影座位的排片,电影排片id为key,此场次座位信息为value,主要记录此场次的座位排布情况,场次座位以json形式存储在redis中,可以设置过期时间等同步应用到电影购票中,用户看到的座位从情况根据电影排片的key从Redis中取出
5、共享session
如我们第一次访问 https://editor.csdn.net这个域名,可能会对应这个IP 112.14.111.222的服务器,然后第二次访问,IP可能会变为112.13.121.219的服务器;负载均衡,一个域名对应多个服务器,将访问量分担到其他的服务器,这样很大程度的减轻了每个服务器上访问量
因为服务器都会有自己的会话session会导致用户每次刷新网页又要重新登录,为了解决这个问题,我们用redis将用户session集中管理,每次获取用户更新或查询登录信息都直接从redis中集中获取
这里的本质还是将某一个东西存入redis缓存中,和缓存功能类似,描述的是不同的应用场景
负载均衡:把众多的访问量分担到其他的服务器上,让每个服务器的压力减少
6、分布式锁
适用场景:在一个集群环境下,多个web应用时对同一个商品进行抢购和减库存操作时,可能出现超卖时会用到分布式锁
setnx key value //存入一个不存在的键值对,如果key不存在,同set;若存在,则不做任何操作
语法:SETNX key value
功能:当且仅当 key 不存在,将 key 的值设为 value ,并返回1;
若给定的 key 已经存在,则 SETNX 不做任何动作,并返回0。
在实践的业务场景中:自己接触的项目中缓存,计数和存对象我使用过,其余的关于共享session,分布式锁的具体应用我暂时没有使用过,具体使用和实践代码可以参考更好的文章,初次学习理解的时候可能比较抽象,多看看图片会帮助我们理解,希望我的分享对能让你对Redis中的string存储模型有更深入的理解!
我会陆续整理Redis其余数据类型的实践和使用,我们下期再见!
非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤️ 分享👥 留言💬thanks!!!
愿你们奔赴在自己的热爱里!