04.redis-五大数据类型(1)

(一)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>
    
    
  • msetmget、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"
    
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿红

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值