说到redis的String类,估计百分之八十的程序员只会用String,而且只是那种比较片面的使用,作为一位优秀的程序员而不是码工、码农、码畜....应该有一种打破砂锅学到底的精神,redis还有这么多的数据类型难道你都会了?分别都有什么使用场景?redis的持久化方式有哪几种?有的人会说这不很简单,RDB和AOF嘛。很好,那说说两者之间的区别,原理有是什么。瞬间懵逼....那换一个问题讲讲redis的主从复制还有哨兵模式,又瞬间懵逼。这样子如果去面试估计分分钟被吊打。那怎么办,一个字学,只要学不死就往死里学。
废话不多说了,进入咱们今天的主题吧。
Redis的数据类型String
string类型是实战中应用最多的数据类型,最简单的命令就是get和set
- l 设置值:set [key] [value]例如 set name zhangshan
- l 获取值:get [key] 例如get name
- l 判断某一个值是否存在:exists [key]
- l 追加字符串:append [key] [value],如果当前不存在则新增,存在则追加
以上命令是最常使用的也比较简单的,下面讲一下比较高级点命令
一些大型网站文章视频的浏览量、阅读量怎么实现的计数的,不可能每次都去访问数据库吧,如果某个火爆的视频计算播放量你每次都去访问数据估计分分钟就把数据库搞挂,这时可以使用redis中incr命令。
- l 自增1:incr [key] 每次自增1相当于i++
- l 自减1:decr [key] 每次自减1相当于i--
- l 指定步长增加:incrby [step]
- l 指定步长减少:decrby [step]
- l 截取字符串:getrange [key] [start] [end] 下标从0开始
- l 偏移量,替换指定位置的字符串:setrange [key] [start] [value]
- l 设置过期时间:setex [key] [time] [key] 时间单位为秒,例如这是key为name的值过期时间为20秒
- l 如果存在则设置值:setnx [key] [value] ,不存在设置成功返回1,存在不设置返回0
讲到这命令这就要讲一下分布式锁了,什么是分布式锁?
分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性。
因为redis是单线程的,所以这个命令可以用来加锁。例如两个进程同时去操作某条记录,先让其去通过命令setnx获取我们的锁,因为redis是单线程的肯定有一前一后,也肯定只有一个线程操作成功,另个线程只能等待。后面我们会对分布式锁进行详细讲解。
- l 批量设置值:mset [key1] [value1] [key2] [value2]......
- l 批量获取值:mget [key1] [key2]......
- l 存储对象
讲到存储对象,那么就要讲一下redis的可以值设计了,例如一张学生表student里面有属性id、name、age,一般可以这样子设计key,student:[id]:name student:[id]:age 即以冒号将属性进行分割
l GetSet命令:如果不存在则返回nil,如果存在,则获取原来的值,并设置新的值
最后讲一下String的使用场景
- l 计数器 比如访问量、播放量、点击率
- l 统计数量
- l 存储对象
你的一个赞一个关注是创作的动力,是我持续输出的能量源泉,老铁关注一波吧!