来啦,老弟?来啦,上一篇就当唠唠嗑,接下来就开始进行实操撸命令,计划是先整体单纯说说Redis的各种用法和应用,最后再结合代码归纳总结。
Redis默认有16个数据库(编号为0~15),默认使用第0个,通过命令select任意切换数据库,和MySql切换数据库一个道理;各数据库之间的数据是隔离的,先启动服务端,再启动客户端,然后开干,如下演示:
Select命令,用于切换数据库
清除数据,主要是测试时使用,在生产环境是杜绝使用这个命令的,如下演示:
Flushdb清除当前库中的数据
Flushall清除所有库中的数据
Key获取、移除、判断是否存在,如下演示
Keys 获取Key
Move 移动指定Key到指定数据库
Exists 判断Key是否存在
查看指定Key对应值类型,如下:
type key
公共的命令暂时就说这么多,接下来开始说说五种基本类型的使用及应用场景;之所以用图片的方式把命令贴出来,主要是在不失真的情况下方便手机阅读,同时希望小伙伴们可以动手敲敲,不要复制~~~
Redis的命令很多,接下来只是说常用的,其他的小伙伴参照文档进行实操吧,这里还是注重实际场景的应用(综合同事、朋友、还有学习过程中提到的场景,并非我都遇到过~~~);
正文
Redis中基本的五种数据结构,分别是字符串string、哈希hash、列表list、集合set、有序集合zset,存储的数据结构大概如下图;
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字符串进行各系统统一认证;
对象缓存:比如之前都喜欢用Session保存用户数据,然后在每个网页中进行使用,但对于分布式或是集群系统就需要做Session共享了,一般会将用户信息转为json字符串进行缓存;
对于简单的对象缓存,也可以用mset和mget实现,但使用相对不如上例方便,如下:
以上只是用于共享数据,但其实经常会用于缓存一些高频率访问但不频繁修改的数据上。比如采集设备数据,需要实时核对设备是否正确,当采集比较频繁,如传感器数据时,核对的设备信息不可能实时从数据库中查,需将其进行缓存,减轻数据库压力的同时,也能提高效率。
可能看到这,有小伙伴会问key值中的冒号啥意思,其实这里是用来分层归类的,就比如userData:userId:userName,理解为:用户数据中指定用户的用户名。
计数器:有没有遇见一种需要递增的数据编号,比如说订单编号:202009290001,后四位不断的递增,单体程序还稍微好处理一点,但如果是分布式系统或集群就有点意思了,所以存在Redis中进行统一递增是不错的选择,针对数据量大的,还可以进行分段计数。