(一)String(字符串)
(1)String常用操作
-
主要操作有添加、查询、追加、获取长度,判断是否存在的操作
-
主要命令:get、set、append、strlen、keys、exists
127.0.0.1:6379> set name jackier #添加一个key为'name'值为'jackier'的数据 OK 127.0.0.1:6379> get name #获取key为'name'的值 "jackier" 127.0.0.1:6379> set name1 chan OK 127.0.0.1:6379> keys * #查询当前库所有的数据 1) "name1" 2) "name" 127.0.0.1:6379> get name #获取key为'name'的值 "jackier" 127.0.0.1:6379> get name1 #获取key为'name1'的值 "chan" 127.0.0.1:6379> append name Good #追加key为'name'的数据拼接'Good'(如果'key'不存在,则新增一个,类似于redis的set name Good)并返回字符串长度 (integer) 11 127.0.0.1:6379> append name1 " you are handsome" #注意:如果要加入的是多个字符,则应加双引号,不然空格redis默认结束。 (integer) 21 127.0.0.1:6379> get name #获取拼接后的字符 "jackierGood" 127.0.0.1:6379> get name1 "chan you are handsome" 127.0.0.1:6379> strlen name1 #获取key为name的字符长度 (integer) 21 127.0.0.1:6379> exists name1 #判断某个key是否存在 (integer) 1 #存在 127.0.0.1:6379> exists k1 (integer) 0 #不存在
-
模糊查询keys命令,有三个通配符:
(1)通配任意多个字符
- 查询所有的键
key *
- 模糊查询k开头,后面随便多少个字符
keys k*
- 模糊查询e为最后一位,前面随便多少个字符
keys *e
- 双 * 模式,匹配任意多个字符:查询包含k的键
keys *k*
(2)通配单个字符
-
模糊查询k字头,并且匹配一个字符
keys k?
-
你只记得第一个字母是k,他的长度是3
keys k??
(3)通配括号内的某一个字符
- 记得其他字母,就第二个字母可能是a或e
keys r[ae]dis
(2)String截取、替换字符串操作
常用命令:
- getrange:(getrange key1 0 4)相当于java中的subString,下标从0开始,不会改变原有数据;
- setrange:(setrange key2 5 888)此语句跟java中replace有点类似,下标也是从0开始,但是有区别:java中是指定替换字符,Redis中是从指定位置开始替换,替换的数据根据你所需替换的长度一致,返回值是替换后的长度。
#截取
127.0.0.1:6379> set key1 "hello world!"
OK
127.0.0.1:6379> get key1
"hello world!"
127.0.0.1:6379>getrange key1 0 4 #截取字符串,相当于java中的subString,下标从0开始,不会改变原有数据
"hello"
127.0.0.1:6379> get key1
"hello world!"
127.0.0.1:6379> getrange key1 0 -1 #0至-1相当于 get key1,效果一致,获取整条数据
"hello world!"
#替换
127.0.0.1:6379> set key2 "hello,,,world!"
OK
127.0.0.1:6379> get key2
"hello,,,world!"
127.0.0.1:6379>setrange key2 5 888 #此语句跟java中replace有点类似,下标也是从0开始,但是有区别:java中是指定替换字符,Redis中是从指定位置开始替换,替换的数据根据你所需替换的长度一致,返回值是替换后的长度
(integer) 14
127.0.0.1:6379> get key2
"hello888world!"
127.0.0.1:6379> setrange key2 5 67 #该处只替换了两位
(integer) 14
127.0.0.1:6379> get key2
"hello678world!"
(3)加减操作
-
一般用来做文章浏览量、点赞数、收藏数等功能
-
incr/decr/incrby/decrby:加减操作,操作的必须是数字类型
- incr:意思是increment,增加
- decr:意思是decrement,减少
127.0.0.1:6379> set num 0 #设置key为'num'的值为0 OK 127.0.0.1:6379> get num "0" 127.0.0.1:6379> incr num #num自增1(相当于i++) (integer) 1 127.0.0.1:6379> incr num #继续自增 (integer) 2 127.0.0.1:6379> get num "2" 127.0.0.1:6379> decr num #num自减 (integer) 1 127.0.0.1:6379> decr num (integer) 0 127.0.0.1:6379> decr num (integer) -1 127.0.0.1:6379> decr num #可以持续自减 (integer) -2 127.0.0.1:6379> incrby num 10 #带by的表示一次key为'num'自增10 (integer) 8 127.0.0.1:6379> incrby num 10 #连续自增 (integer) 18 127.0.0.1:6379> incrby num 10 (integer) 28 127.0.0.1:6379> incrby num 10 (integer) 38 127.0.0.1:6379> get num #查询key为'num'的值 "38" 127.0.0.1:6379> decrby num 8 #带by表示一次key为'num'自减8 (integer) 30 127.0.0.1:6379> decrby num 8 (integer) 22 127.0.0.1:6379> decrby num 8 (integer) 14 127.0.0.1:6379> decrby num 8 #连续自减 (integer) 6 127.0.0.1:6379>
-
mset、mget、msetnx操作
- msetnx是一个原子性的操作,在一定程度上保证了事务!要么都成功,要么都失败!
127.0.0.1:6379> set k1 v1 k2 v2 # set不支持一次添加多条数据
(error) ERR syntax error
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 # mset可以一次添加多条数据
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379> mget k1 k2 k3 # 一次获取多条数据
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k3 v33 k4 v4 # 一次添加多条数据时,如果添加的数据中有已经存在的,则失败
(integer) 0
127.0.0.1:6379> msetnx k4 v44 k5 v55 #全部成功
(integer) 1
127.0.0.1:6379> mget k1 k2 k3 k4 k5
1) "v1"
2) "v2"
3) "v3"
4) "v44"
5) "v55"
- getset操作
- 先get后set
127.0.0.1:6379> getset k6 v6
(nil)
127.0.0.1:6379> keys *
1) "k4"
2) "k6"
3) "k1"
4) "k5"
5) "k2"
6) "k3"
-
expire:设置过期时间
- ttl key:查看键还有多久过期(-1永不过期,-2已过期)
- time to live 还能活多久
127.0.0.1:6379> expire k1 15 #设置key为'k1'的数据过期时间为15秒 单位seconds (integer) 1 127.0.0.1:6379> ttl k1 (integer) 9 127.0.0.1:6379> ttl k1 (integer) 6 127.0.0.1:6379> ttl k1 (integer) 3 127.0.0.1:6379> ttl k1 (integer) -2
-
设置过期时间、不存在设置操作
- 设置过期时间,跟Expire的区别是前者设置已存在的key的过期时间,而setex是在创建的
127.0.0.1:6379> setex num 15 hello OK 127.0.0.1:6379> ttl num (integer) 10 127.0.0.1:6379> ttl num (integer) 7 127.0.0.1:6379> ttl num (integer) 5 127.0.0.1:6379> ttl num (integer) 2 127.0.0.1:6379> ttl num #返回为-2时证明该key已过期,即不存在 (integer) -2 127.0.0.1:6379> setnx num1 hello2 #如果key为‘num1’不存在,新增数据,返回值1证明成功 (integer) 1 127.0.0.1:6379> setnx num1 hello2 #如果key为‘num1’的已存在,设置失败,返回值0,也就是说这个跟set的区别是:set会替换原有的值,而setnx不会,存在即不设置,确保了数据误操作~ (integer) 0 127.0.0.1:6379> keys * 1) "k4" 2) "k6" 3) "k5" 4) "num1" 5) "k2" 6) "k3" 7) "k11"