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

154 阅读5分钟

(一)String(字符串)

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

  • 📝 个人主页:程序员阿红🔥
  • 🎉 支持我:点赞👍收藏⭐️留言📝
  • 🍓欢迎大家关注哦,互相学习🍓
  • 🍋欢迎大家访问哦,互相学习🍋
  • 🍑欢迎大家收藏哦,互相学习🍑

1. redis官网:www.redis.io/

(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"
    
    

💖💖💖 完结撒花

💖💖💖 路漫漫其修远兮,吾将上下而求索

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

最后,还不动手进你的收藏夹吃灰😎😎😎

🎉 支持我:点赞👍收藏⭐️留言📝