下面总结并演示了Redis的常用管理命令、key操作、字符串、集合、列表、散列类型的操作命令。
更多请在微信公众号Java技术栈后台回复关键字:Redis。
如果命令参数过多,建议通过配置文件来启动Redis。
>redis-server[xx/xx/redis.conf]6379是Redis默认端口号。
2、连接Redis >./redis-cli[-h127.0.0.1-p6379] 3、停止Redis >redis-clishutdown >killredis-pid以上两条停止Redis命令效果一样。
4、发送命令给Redis发送命令有两种方式:
1、redis-cli带参数运行,如:
>redis-clishutdown notconnected>这样默认是发送到本地的6379端口。
2、redis-cli不带参数运行,如:
>./redis-cli 127.0.0.1:6379>shutdown notconnected> 5、测试连通性 127.0.0.1:6379>ping PONG语法:keyspattern
127.0.0.1:6379>keys* 1)"javastack" *表示通配符,表示任意字符,会遍历所有键显示所有的键列表,时间复杂度O(n),在生产环境不建议使用。 获取键总数语法:dbsize
127.0.0.1:6379>dbsize (integer)6获取键总数时不会遍历所有的键,直接获取内部变量,时间复杂度O(1)。
查询键是否存在语法:existskey[key...]
127.0.0.1:6379>existsjavastackjava (integer)2查询查询多个,返回存在的个数。
删除键语法:delkey[key...]
127.0.0.1:6379>deljavajavastack (integer)1可以删除多个,返回删除成功的个数。
查询键类型语法:typekey
127.0.0.1:6379>typejavastack string 移动键语法:movekeydb
如把javastack移到2号数据库。
127.0.0.1:6379>movejavastack2 (integer)1 127.0.0.1:6379>select2 OK 127.0.0.1:6379[2]>keys* 1)"javastack" 查询key的生命周期(秒)秒语法:ttlkey
毫秒语法:pttlkey
127.0.0.1:6379[2]>ttljavastack (integer)-1-1:永远不过期。
设置过期时间秒语法:expirekeyseconds
毫秒语法:pexpirekeymilliseconds
127.0.0.1:6379[2]>expirejavastack60 (integer)1 127.0.0.1:6379[2]>ttljavastack (integer)55 设置永不过期语法:persistkey
127.0.0.1:6379[2]>persistjavastack (integer)1 更改键名称语法:renamekeynewkey
127.0.0.1:6379[2]>renamejavastackjavastack123 OK字符串是Redis中最基本的数据类型,单个数据能存储的最大空间是512M。
存放键值语法:setkeyvalue[EXseconds][PXmilliseconds][NX|XX]
nx:如果key不存在则建立,xx:如果key存在则修改其值,也可以直接使用setnx/setex命令。
127.0.0.1:6379>setjavastack666 OK 获取键值语法:getkey
127.0.0.1:6379[2]>getjavastack "666" 值递增/递减如果字符串中的值是数字类型的,可以使用incr命令每次递增,不是数字类型则报错。
语法:incrkey
127.0.0.1:6379[2]>incrjavastack (integer)667一次想递增N用incrby命令,如果是浮点型数据可以用incrbyfloat命令递增。
同样,递减使用decr、decrby命令。
批量存放键值语法:msetkeyvalue[keyvalue...]
127.0.0.1:6379[2]>msetjava11java22java33 OK 获取获取键值语法:mgetkey[key...]
127.0.0.1:6379[2]>mgetjava1java2 1)"1" 2)"2"Redis接收的是UTF-8的编码,如果是中文一个汉字将占3位返回。
获取值长度语法:strlenkey
127.0.0.1:6379[2]>strlenjavastack
(integer)3 追加内容语法:appendkeyvalue
127.0.0.1:6379[2]>appendjavastackhi (integer)5向键值尾部添加,如上命令执行后由666变成666hi
获取部分字符语法:getrangekeystartend
>127.0.0.1:6379[2]>getrangejavastack04 "javas"集合类型和列表类型相似,只不过是集合是无序且不可重复的。
语法:saddkeymember[member...]
//这里有8个值(2个java),只存了7个 127.0.0.1:6379>saddlangsjavaphpc++gorubypythonkotlinjava (integer)7 获取元素获取所有元素语法:smemberskey
127.0.0.1:6379>smemberslangs 1)"php" 2)"kotlin" 3)"c++" 4)"go" 5)"ruby" 6)"python" 7)"java"随机获取语法:srandmemberlangscount
127.0.0.1:6379>srandmemberlangs3 1)"c++" 2)"java" 3)"php" 判断集合是否存在元素语法:sismemberkeymember
127.0.0.1:6379>sismemberlangsgo (integer)1 获取集合元素个数语法:scardkey
127.0.0.1:6379>scardlangs (integer)7 删除集合元素语法:sremkeymember[member...]
127.0.0.1:6379>sremlangsrubykotlin (integer)2 弹出元素语法:spopkey[count]
127.0.0.1:6379>spoplangs2 1)"go" 2)"java"和列表的区别:
1、列表使用链表实现,两头快,中间慢。有序集合是散列表和跳跃表实现的,即使读取中间的元素也比较快。
2、列表不能调整元素位置,有序集合能。
3、有序集合比列表更占内存。
存储值语法:zaddkey[NX|XX][CH][INCR]scoremember[scoremember...]
127.0.0.1:6379>zaddfootCounts16011tid20082huny2893nosy (integer)3 获取元素分数语法:zscorekeymember
127.0.0.1:6379>zscorefootCountstid "16011"获取排名范围排名语法:zrangekeystartstop[WITHSCORES]
//获取所有,没有分数 127.0.0.1:6379>zrangefootCounts0-1 1)"nosy" 2)"tid" 3)"huny" //获取所有及分数 127.0.0.1:6379>zrangefootCounts0-1Withscores 1)"nosy" 2)"2893" 3)"tid" 4)"16011" 5)"huny" 6)"20082"获取指定分数范围排名语法:zrangebyscorekeyminmax[WITHSCORES][LIMIToffsetcount]
127.0.0.1:6379>zrangebyscorefootCounts300030000withscoreslimit01 1)"tid" 2)"16011" 增加指定元素分数语法:zincrbykeyincrementmember
127.0.0.1:6379>zincrbyfootCounts2000tid "18011" 获取集合元素个数语法:zcardkey
127.0.0.1:6379>zcardfootCounts (integer)3 获取指定范围分数个数语法:zcountkeyminmax
127.0.0.1:6379>zcountfootCounts200020000 (integer)2 删除指定元素语法:zremkeymember[member...]
127.0.0.1:6379>zremfootCountshuny (integer)1 获取元素排名语法:zrankkeymember
127.0.0.1:6379>zrankfootCountstid (integer)1列表类型是一个有序的字段串列表,内部是使用双向链表实现,所有可以向两端操作元素,获取两端的数据速度快,通过索引到具体的行数比较慢。
列表类型的元素是有序且可以重复的。
存储值左端存值语法:lpushkeyvalue[value...]
127.0.0.1:6379>lpushlistlilysandy (integer)2右端存值语法:rpushkeyvalue[value...]
127.0.0.1:6379>rpushlisttomkitty (integer)4索引存值语法:lsetkeyindexvalue
127.0.0.1:6379>lsetlist3uto OK 弹出元素左端弹出语法:lpopkey
127.0.0.1:6379>lpoplist "sandy"右端弹出语法:rpopkey
127.0.0.1:6379>rpoplist "kitty" 获取元素个数语法:llenkey
127.0.0.1:6379>llenlist (integer)2 获取列表元素两边获取语法:lrangekeystartstop
127.0.0.1:6379>lpushuserstomkittylandponyjackmaddy (integer)6 127.0.0.1:6379>lrangeusers03 1)"maddy" 2)"jack" 3)"pony" 4)"land" //获取所有 127.0.0.1:6379>lrangeusers0-1 1)"maddy" 2)"jack" 3)"pony" 4)"land" 5)"kitty" 6)"tom" //从右端索引 127.0.0.1:6379>lrangeusers-3-1 1)"land" 2)"kitty" 3)"tom"索引获取语法:lindexkeyindex
127.0.0.1:6379>lindexlist2 "ketty" //从右端获取 127.0.0.1:6379>lindexlist-5 "sady" 删除元素根据值删除语法:lremkeycountvalue
127.0.0.1:6379>lpushuserids111222111222222333222222 (integer)8 //count=0删除所有 127.0.0.1:6379>lremuserids0111 (integer)2 //count>0从左端删除前count个 127.0.0.1:6379>lremuserids3222 (integer)3 //count<0从右端删除前count个 127.0.0.1:6379>lremuserids-3222 (integer)2范围删除语法:ltrimkeystartstop
//只保留2-4之间的元素 127.0.0.1:6379>ltrimlist24 OKredis字符串类型键和值是字典结构形式,这里的散列类型其值也可以是字典结构。
存放键值单个语法:hsetkeyfieldvalue
127.0.0.1:6379>hsetusernamejavastack (integer)1多个语法:hmsetkeyfieldvalue[fieldvalue...]
127.0.0.1:6379>hmsetusernamejavastackage20addresschina OK不存在时语法:hsetnxkeyfieldvalue
127.0.0.1:6379>hsetnxusertall180 (integer)0 获取字段值单个语法:hgetkeyfield
127.0.0.1:6379>hgetuserage "20"多个语法:hmgetkeyfield[field...]
127.0.0.1:6379>hmgetusernameageaddress 1)"javastack" 2)"20" 3)"china"获取所有键与值语法:hgetallkey
127.0.0.1:6379>hgetalluser 1)"name" 2)"javastack" 3)"age" 4)"20" 5)"address" 6)"china"获取所有字段语法:hkeyskey
127.0.0.1:6379>hkeysuser 1)"name" 2)"address" 3)"tall" 4)"age"获取所有值语法:hvalskey
127.0.0.1:6379>hvalsuser 1)"javastack" 2)"china" 3)"170" 4)"20" 判断字段是否存在语法:hexistskeyfield
127.0.0.1:6379>hexistsuseraddress (integer)1 获取字段数量语法:hlenkey
127.0.0.1:6379>hlenuser (integer)4 递增/减语法:hincrbykeyfieldincrement
127.0.0.1:6379>hincrbyusertall-10 (integer)170 删除字段语法:hdelkeyfield[field...]
127.0.0.1:6379>hdeluserage (integer)1都是基本的命令用法,不会用了就来翻一下吧!
写了大半天,点赞转发支持一下吧,亲!
本文原创首发于微信公众号:Java技术栈(id:javastack),关注公众号回复“答案”获取博主整理的全套Redis面试题及答案,转载请原样保留来源信息。
本文内容总结:你需要掌握的Redis知识,常用管理命令,key操作命令,字符串操作命令,集合操作命令,集合,有序集合,列表操作命令,散列操作命令,
原文链接:https://www.cnblogs.com/javastack/p/9854489.html