跟我一起学Redis之五种基本类型及其应用场景举例(干了6个小时)

来啦,老弟?来啦,上一篇就当唠唠嗑,接下来就开始进行实操撸命令,计划是先整体单纯说说Redis的各种用法和应用,最后再结合代码归纳总结。

Redis默认有16个数据库(编号为0~15),默认使用第0个,通过命令select任意切换数据库,和MySql切换数据库一个道理;各数据库之间的数据是隔离的,先启动服务端,再启动客户端,然后开干,如下演示:

Select命令,用于切换数据库

img

清除数据,主要是测试时使用,在生产环境是杜绝使用这个命令的,如下演示:

Flushdb清除当前库中的数据

Flushall清除所有库中的数据

flushdb

Key获取、移除、判断是否存在,如下演示

Keys 获取Key

Move 移动指定Key到指定数据库

Exists 判断Key是否存在

key

查看指定Key对应值类型,如下:

type key

img

公共的命令暂时就说这么多,接下来开始说说五种基本类型的使用及应用场景;之所以用图片的方式把命令贴出来,主要是在不失真的情况下方便手机阅读,同时希望小伙伴们可以动手敲敲,不要复制~~~

Redis的命令很多,接下来只是说常用的,其他的小伙伴参照文档进行实操吧,这里还是注重实际场景的应用(综合同事、朋友、还有学习过程中提到的场景,并非我都遇到过~~~);

img

正文

Redis中基本的五种数据结构,分别是字符串string、哈希hash、列表list、集合set、有序集合zset,存储的数据结构大概如下图;

img

string

非常常用的类型,搞过Redis的应该都用过。着重分享以下命令:

set key value : 新增或更新字符串键值对

mset key value [key1 value1 ...]:批量新增或更新键值对

setnx key value :如果key不存在就添加,否则就失败

setex key seconds value:设置简直对的时同时设置过期时间

get key :获取指定key的值

mget key [key1 key2 ...]:获取多个key的值

del key [key1 key2 ...]:删除指定key

expire key seconds:设置指定key过期时间,以秒为单位

ttl key:查看指定key还剩余多长时间

incr key:将指定key存储的数值加1

decr key:将指定key存储的数值减1

incrby key step:将指定key存储的数值加上step

decrby key step :将指定key存储的数值减去step

结合应用场景演练*↓↓↓*

单值缓存:即简单键值对数据缓存;有一些数据需要共享,比如在没有统一授权中心的多个系统中,可以通过相同的算法共享token字符串进行各系统统一认证;

img

对象缓存:比如之前都喜欢用Session保存用户数据,然后在每个网页中进行使用,但对于分布式或是集群系统就需要做Session共享了,一般会将用户信息转为json字符串进行缓存;

img

对于简单的对象缓存,也可以用mset和mget实现,但使用相对不如上例方便,如下:

img

以上只是用于共享数据,但其实经常会用于缓存一些高频率访问但不频繁修改的数据上。比如采集设备数据,需要实时核对设备是否正确,当采集比较频繁,如传感器数据时,核对的设备信息不可能实时从数据库中查,需将其进行缓存,减轻数据库压力的同时,也能提高效率。

可能看到这,有小伙伴会问key值中的冒号啥意思,其实这里是用来分层归类的,就比如userData:userId:userName,理解为:用户数据中指定用户的用户名。

计数器:有没有遇见一种需要递增的数据编号,比如说订单编号:202009290001,后四位不断的递增,单体程序还稍微好处理一点,但如果是分布式系统或集群就有点意思了,所以存在Redis中进行统一递增是不错的选择,针对数据量大的,还可以进行分段计数。

image-20201009094243726

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfywj.html