深入了解Redis操作五大数据类型常用命令
Redis的几个常用命令数据库切换
我们知道Redis默认有16个数据库,默认是第0个数据库,那么如果在需要对数据库进行切换的时候,我们就可以使用下面这个命令:
使用如下命令进行切换SELECTindex1。清除当前数据库的数据
如果想要清除指定某一个数据库的数据flushdb1。
清除所有数据库的数据flushall1。查看数据库所有key
接下来这个命令应该是最常用的了keys1。判断某个键是否存在
平常在开发中,我们还需要经常对key进行判断,判断其是否存在existskey1。设置过期时间和查看剩余时间
因为我们设置的缓存数据一般都不能是永久的,这个时候就需要我们在存储数据的时候,就为其设置过期时间。127。0。0。1:6379expiretest0110(integer)1127。0。0。1:6379ttltest01(integer)21。2。3。4。查看当前key的类型typekeyname1。string数据类型
string类型是Redis中五大基本数据类型之一,这也是最常使用到的一个数据类型,所有很多小伙伴们对Redis的认识和操作就仅仅的停留在了对Redis的操作层面,但是你是否知道string类型中的相关命令,还是有非常多实用的String类型存取基本操作
接下来先看一下对string类型进行基本存储和获取的命令。127。0。0。1:6379setkey1v1设置key和valueOK127。0。0。1:6379getkey1获取key对应的valuev1127。0。0。1:6379keys获取所有的key1)key12)mykey3)hxy4)sitelist5)hxy26)huixiaoyuan127。0。0。1:6379existskey1查看当前key是否存在(integer)1127。0。0。1:6379appendkey1hello给当前key的value后面追加(integer)7127。0。0。1:6379strlenkey1获取value的长度(integer)71。2。3。4。5。6。7。8。9。10。11。12。13。14。15。16。17。递增递减操作
如果我们存储的string中的内容是数字的话,我们也可以对其进行增或减操作,Redis可以自动的对字符串进行相关的操作。实现的命令如下:127。0。0。1:6379setviews0OK127。0。0。1:6379getviews0127。0。0。1:6379incrviews(integer)1127。0。0。1:6379decrviews(integer)1127。0。0。1:6379incrbyviews10(integer)9127。0。0。1:6379decrbyview9(integer)9127。0。0。1:6379getviews9127。0。0。1:6379decrbyviews9(integer)0127。0。0。1:63791。2。3。4。5。6。7。8。9。10。11。12。13。14。15。16。17。setex和setnx使用setex设置过期时间setnx不存在再设置,如果存在就设置不成功。常用于分布式锁设置key3的值为hello,过期时间为30秒127。0。0。1:6379setexkey330helloOK127。0。0。1:6379ttlkey3(integer)21127。0。0。1:6379getkey3hello127。0。0。1:6379setnxmykey2redis(integer)1127。0。0。1:6379setnxmykey2hxy(integer)0127。0。0。1:6379getmykey2redis127。0。0。1:63791。2。3。4。5。6。7。8。9。10。11。12。13。14。mset和mget进行批量设置
使用msetnx时,同时设置一个或多个keyvalue对,当且仅当所有给定key都不存在时才成立。127。0。0。1:6379msetk1v1k2v2k3v3OK127。0。0。1:6379mgetk1k2k31)v12)v23)v3127。0。0。1:6379msetnxk1v1k4v4(integer)0127。0。0。1:6379getk4(nil)127。0。0。1:63791。2。3。4。5。6。7。8。9。10。11。getset命令使用
getset命令从字面意思就可以看出来,他的作用是先get再set。如果不存在值,则返回null127。0。0。1:6379getsetk5v5(nil)127。0。0。1:6379getk5v5如果存在值,就先获取再设置新的值127。0。0。1:6379getsetk5vv5v5127。0。0。1:6379getk5vv51。2。3。4。5。6。7。8。9。10。
总结string类似的使用场景:计数器统计多单位数量对象缓存存储粉丝数list数据类型list存取基本操作
在使用list类型进行存取的时候,有两个命令需要进行区分:lpush:从左边插入元素rpush:从右边插入元素127。0。0。1:6379lpushlist1v1(integer)1127。0。0。1:6379lpushlist1v2(integer)2127。0。0。1:6379lpushlist1v3(integer)3127。0。0。1:6379lrangelist1011)v32)v2127。0。0。1:6379rpushlist1v4(integer)4127。0。0。1:6379lrangelist1041)v32)v23)v14)v41。2。3。4。5。6。7。8。9。10。11。12。13。14。15。16。list类型移除元素lpop从左边删除rpop从右边删除lrangekeyname01获取list中的全部元素127。0。0。1:6379lpoplist1v3127。0。0。1:6379rpoplist1v4127。0。0。1:6379lrangelist1011)v22)v1127。0。0。1:63791。2。3。4。5。6。7。8。
注意:只有pop和push才分左右,其他的l都是list的意思
总结:redis中的list其实是一个链表。beforenodeafter,left,right都可以插入值如果key不存在,就创建新的链表如果key存在,就新增内容如果移除了所有值,空链表,也代表不存在在两边插入或改动值效率最高,中间元素效率相对来说会低一点set集合set集合存取基本操作127。0。0。1:6379saddmysethello(integer)1127。0。0。1:6379saddmysethello2(integer)1127。0。0。1:6379saddmysethello3(integer)1127。0。0。1:6379smembersmyset1)hello2)hello33)hello2127。0。0。1:6379sismembermysethello(integer)1127。0。0。1:6379sismembermysetworld(integer)0127。0。0。1:63791。2。3。4。5。6。7。8。9。10。11。12。13。14。15。获取set中元素个数127。0。0。1:6379scardmyset(integer)31。2。移除set集合中的指定元素127。0。0。1:6379sremmysethello(integer)1127。0。0。1:6379scardmyset(integer)21。2。3。4。随机抽选出指定个数的元素127。0。0。1:6379srandmembermysethello3127。0。0。1:6379srandmembermyset21)hello22)hello31。2。3。4。5。随机删除一个元素127。0。0。1:6379spopmysethello21。2。SDIFF差集SINTER交集SUNION并集SDIFFkeyname1keyname21。
总结set集合一般用于元素的不重复的场景,比如抽奖系统,轮播等场景下Hash(哈希)Hash存取基本操作
在使用hash集合的时候,要注意,hash其实就是一个Map集合,keymap的时候,值是一个map集合的形式进行存储的,也和Java中的hashmap有一个类似。set一个具体的keyvalue127。0。0。1:6379hsetmyhashfieid1v1(integer)1127。0。0。1:6379hgetmyhashfieid1v1set多个keyvalue127。0。0。1:6379hmsetmyhashfieid1v1fieid2v2OKget多个字段值127。0。0。1:6379hmgetmyhashfieid1fieid21)v12)v21。2。3。4。5。6。7。8。9。10。11。12。
HVALS获取所有的value,HKEYS获取所有的key,HGETALL获取所有的键值127。0。0。1:6379HVALSmyhash1)v12)v2127。0。0。1:6379HKEYSmyhash1)fieid12)fieid2127。0。0。1:6379HGETALLmyhash1)fieid12)v13)fieid24)v21。2。3。4。5。6。7。8。9。10。11。
总结:
hash可以用于存储变更的数据,比如user,name,age等,尤其是用户信息之类的,hash更加适合用于对象的存储,string更加适合用于字符串的存储。Zset(有序集合)
在set集合的基础上增加一个序列号,来进行排序Zset有序集合存取基本操作127。0。0。1:6379ZADDsalary2500xiaohong(integer)1127。0。0。1:6379ZADDsalary6000dahui(integer)1127。0。0。1:6379ZADDsalary1000wanggang(integer)1指定输出范围是负无穷到正无穷,按照从小到大排序,127。0。0。1:6379ZRANGEBYSCOREsalaryinfinf1)wanggang2)xiaohong3)dahui从大到小排序127。0。0。1:6379ZREVRANGEsalary011)dahui2)xiaohong3)wanggang1。2。3。4。5。6。7。8。9。10。11。12。13。14。15。16。
ZRANGEBYSCORE使用语法ZRANGEBYSCOREkeyminmax1。显示所有数据,并且key和value同时显示127。0。0。1:6379ZRANGEBYSCOREsalaryinfinfwithscores1)wanggang2)10003)xiaohong4)25005)dahui6)60001。2。3。4。5。6。7。获取集合中元素的个数127。0。0。1:6379ZCARDsalary(integer)31。2。
总结案例思路:set排序,存储班级成绩,工资表排序普通消息1,重要消息2,带权重进行判断排行榜应用实现
以上是在对五种数据类型进行存取时的一些常用命令操作。关于其他的命令使用,小伙伴们在用到的时候可以直接入官网查看就可以了。
张副官为什么不老从老九门到沙海不老容颜张副官为什么不老:从《老九门》到《沙海》不老容颜在南派三叔的小说《老九门》中,我们认识了对九门之首张启山言听计从的张副官张日山,但是他现在却是出现在了《沙海》中,而且容颜……
电视剧冼夫人传奇将于11月11日在京开机以全新影视艺术手法再现冼夫人波澜壮阔一生茂名日报社全媒体记者杨海云杨珮珮张丁文十年磨一剑,一朝试锋芒。历经多年的筹备,由茂名市、广东广播电视台、北京光兆大地传媒有限……
韩国好看的爱情电视剧(精选10部超级好看的韩国爱情电视剧)韩剧一度在我国非常受欢迎,很多韩剧不仅在韩国很火,在中国也很受欢迎,直观的印象就要属《太阳的后裔》,当时热播真是中韩两地追剧,男女主也在中国大火,下面为大家精选10部超级好看的……
我的小尾巴中王睿涵是干嘛的王睿涵个人资料哪里人据悉,《我的小尾巴》哥哥王睿涵撞脸黄子韬,乍一看还以为黄子韬带妹妹上节目了,尤其是眉眼与脸型,十分相似。那么,我的小尾巴中王睿涵是干嘛的呢?为什么会上这个节目,随后,王睿涵个人……
三十而已结尾小摊是什么意思,三十而已结尾小摊是真实的吗三十而已说出来很多人清楚,可三十而已电视剧结尾小摊是什么意思,很多网友就想去了解一下有关的故事,看结尾的小摊说明要贴近生活,才能把电视剧前期的内容有所联系,但有的网友就不清楚三……
甄嬛传温实初结局,甄嬛传温实初是谁演的传奇剧《甄嬛传》给展现温实初为太医院后起之秀,还跟甄家存在世交,并他特别喜欢甄嬛,只是表白发生拒绝而给感情深藏在心中,可他一直做太医时刻守候在甄嬛身边,直到最后张晓龙扮演的温实……
甄嬛传甄嬛结局是什么,甄嬛传甄嬛是谁演的传奇剧《甄嬛传》给带来甄嬛做为孝圣宪皇后,并她17岁选秀入宫,所表现特别为人聪明慧黠,还善于察言观色体察人心,不过最后孙俪出演的甄嬛跟允礼渐生情愫,以至于她返回皇宫再度受宠变成……
几款单反微单视频神机大比拼谁才是真正的王者?现在随着短视频的兴起,越来越多的小伙伴们开始进行短视频创作,当然了,如果是直播或者拍竖版的小视频,直接用配置高一些的手机就完全可以,但是如果想要拍出高质量的视频,特别是要达到电……
甄嬛传华妃哪集死的如何评价蒋欣饰演的华妃在看过《甄嬛传》的小伙伴应该是知道华妃,特别是她的那句ldquo;就赏她一丈红吧rdquo;相信很多人都忘不了,还有她那经典的表情ldquo;翻白眼rdquo;真实让人记忆犹新……
甄嬛传经典台词皇上臣妾做不到啊(图)甄嬛传经典台词:皇上臣妾做不到啊(图)第三愿,便得一心人,白头不相离。(菀贵人)凡事就怕用心学。mdash;mdash;黄桑放不下荣华富贵的人,就永远成不了大……
永恒族和灭霸是什么关系,永恒族上映时间永恒族说出来就有很少了解,可它和灭霸是堂兄妹关系,很多网友就想去了解一下具体有关的情况,看样子是有着很深的联系,才能编出来一个完整的故事出来,但有的网友就发现永恒族电影的上映时……
周子舒真实身份是什么山河令周子舒和温客行什么关系《山河令》之前的剧情里面,周子舒给大家的印象他一直蓬头垢面的,我们都没见过他的真面目,知道周子舒真实身份的人不多,那周子舒真实身份是什么?山河令周子舒和温客行什么关系?我们一起……