Redis的五大数据类型(一)

1、字符串类型:string

(1)添加、查询

  • 添加数据:set key value(如果key已存在,之前的value将会被覆盖)

  • 查询指定key的值:get key

127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"
127.0.0.1:6379> set k "hello world"
OK
127.0.0.1:6379> set k hello world
(error) ERR syntax error
127.0.0.1:6379> set k hello,world
OK
127.0.0.1:6379> get k
"hello,world"

注意:插入的数据中如果有空格的数据,需要用“ ”双引号或者改为逗号分隔,因为在Redis中空格就是分隔符,相当于该参数已结束。

(2)追加、获取长度、判断是否存在

  • 追加字符串:append key value(返回字符串长度,如果key不存在,则存储为新的key)

  • 获取字符串长度:strlen key

  • 判断是否存在:exists key(存在返回1,不存在返回0)

127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists name1
(integer) 0
127.0.0.1:6379> strlen name
(integer) 8
127.0.0.1:6379> append name ,lisi
(integer) 13
127.0.0.1:6379> get name
"zhangsan,lisi"

注意:追加字符串时,如果key存在,可以再value前加上适合的符号进行拼接。

(3)加、减操作

  • 将value数值加一:incr key(返回计算后的值,如果该值不是数值,将报错;如果key不存在,则自动存储新的key,并初始化为0,然后加一)
  • 将value数值减一:decr key(用法同上)
  • 将value数值加某一具体值:incrby key increment
  • 将value数值减某一具体值:decrby key increment
127.0.0.1:6379> get k1
"15"
127.0.0.1:6379> incr k1
(integer) 16
127.0.0.1:6379> decr k1
(integer) 15
127.0.0.1:6379> incrby k1 10
(integer) 25
127.0.0.1:6379> decrby k1 15
(integer) 10

(4)截取、替换操作

  • 闭区间截取字符串中的某一段:getrange key startIndex endIndex(下标从0开始,最后一个字符的下标为-1或字符串长度减1)

  • 用新的value覆盖从某一下标开始的字符串:setrange key offset value

127.0.0.1:6379> get name
"zhangsan,lisi"
127.0.0.1:6379> getrange name 0 7
"zhangsan"
127.0.0.1:6379> setrange name 9 hhhh
(integer) 13
127.0.0.1:6379> get name
"zhangsan,hhhh"

(5)设置过期时间、不存在设置

  • 添加新的数据并同时设置生命周期:setex key seconds value(跟expire的区别是前者设置已存在的key的过期时间,而setex是在创建的时候设置过期时间,返回-2证明该key已过期)

  • 当key值不存在时添加数据:setnx key value(key值不存在时添加,返回结果1;key值已存在不添加,返回结果0)

127.0.0.1:6379> setex kk 15 8
OK
127.0.0.1:6379> ttl kk
(integer) 11
127.0.0.1:6379> ttl kk
(integer) 5
127.0.0.1:6379> ttl kk
(integer) -2
127.0.0.1:6379> setnx kk 88
(integer) 1
127.0.0.1:6379> setnx kk 66
(integer) 0

(6)批量(添加新数据、获取数据、添加key不存在的数据)

  • 批量添加新的数据:mset key1 value1 key2 value2 key3 value3(中间使用空格隔开)

  • 批量获取数据:mget key1 key2 key3 (中间使用空格隔开)

  • 批量添加key不存在的数据:msetnx key1 value1 key2 value2 (所有key都不存在设则置成功,返回1;只要有一个存在则设置失败,返回0)

127.0.0.1:6379> mset k1 12 k2 15 k3 18
OK
127.0.0.1:6379> mget k1 k2 k3
1) "12"
2) "15"
3) "18"
127.0.0.1:6379> msetnx k1 5 k4 8
(integer) 0
127.0.0.1:6379> msetnx k4 8 k5 12
(integer) 1
127.0.0.1:6379> mget k1 k2 k3 k4 k5
1) "12"
2) "15"
3) "18"
4) "8"
5) "12"

总结:String是Redis中最常用的一种数据类型,也是Redis中最简单的一种数据类型。可以在缓存、计数器、用户会话、分布式锁等场景进行应用,需要注意的是,Redis 的字符串类型是二进制安全的,可以存储任意数据,不限于文本。但对于大型数据或频繁的字符串操作,需要考虑内存消耗和性能影响。

2、列表类型:list(有序可重复列表)

(1)lpush(左插入)、lrange(查询集合)、rpush(右插入)操作

  • 将一个或多个值依次插入列表的表头:lpush key value1 value2 …(若该key已存在,将新值追加在原来的列表中)(l:left)

  • 获取列表中指定下标区间的元素:lrange key startIndex endIndex

  • 将一个或多个值依次插入列表的表尾:rpush key value1 value2 …(若该key已存在,将新值追加在原来的列表中)(r:right)

#lpush(左插入)
127.0.0.1:6379> lpush list v1
(integer) 1
127.0.0.1:6379> lpush list v2
(integer) 2
127.0.0.1:6379> lpush list v3
(integer) 3

#lrange
127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> lpush list1 v1 v2 v3 v4 v5  #批量添加集合元素
(integer) 5
127.0.0.1:6379> lrange list1 0 -1
1) "v5"
2) "v4"
3) "v3"
4) "v2"
5) "v1"
127.0.0.1:6379> lrange list 0 1  #指定查询列表中的元素,从下标零开始,1结束,两个元素
1) "v3"
2) "v2"
127.0.0.1:6379> lrange list 0 0  #指定查询列表中的唯一元素
1) "v3"

#rpush(右插入)
127.0.0.1:6379> rpush list v1
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"
3) "v1"
4) "v1"

(2)lpop(左移除)、rpop(右移除)操作

  • 删除指定列表的表头元素并返回:lpop key

  • 删除指定列表的表尾元素并返回:rpop key

#lpop
127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"
3) "v1"
4) "v1"
127.0.0.1:6379> lpop list
"v3"

#rpop
127.0.0.1:6379> lrange list 0 -1
1) "v2"
2) "v1"
3) "v1"
127.0.0.1:6379> rpop list
"v1"
127.0.0.1:6379> lrange list 0 -1
1) "v2"
2) "v1"

(3)lindex(查询指定下标元素)、llen(获取集合长度) 操作

  • 获取指定列表中指定下标的元素并返回:lindex key index

  • 获取指定列表的长度:llen key

#lindex
127.0.0.1:6379> lrange list 0 -1
1) "v2"
2) "v1"
127.0.0.1:6379> lindex list 1  #获取指定下标位置集合的元素,下标从0开始计数
"v1"
127.0.0.1:6379> lindex list 0
"v2"

#llen
127.0.0.1:6379> llen list   #获取指定集合的元素长度
(integer) 2

(4)lrem(根据value移除指定的值)

根据count的值移除列表中的指定的某一些元素:lrem key count value

(count>0:从表头开始数前n个;count<0:从表尾开始数前n个;count=0:移除所有跟value相同的元素)

127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v5"
3) "v2"
4) "v3"
5) "v2"
6) "v2"
7) "v1"
8) "v2"
9) "v1"

#count>0
127.0.0.1:6379> lrem list 1 v3
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "v5"
2) "v2"
3) "v3"
4) "v2"
5) "v2"
6) "v1"
7) "v2"
8) "v1"

#count<0
127.0.0.1:6379> lrem list -1 v1
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "v5"
2) "v2"
3) "v3"
4) "v2"
5) "v2"
6) "v1"
7) "v2"

#count=0
127.0.0.1:6379> lrem list 0 v2
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "v5"
2) "v3"
3) "v1"

(5)ltrim(截取元素)、rpoplpush(移除指定集合中最后一个元素到一个新的集合中)操作

#ltrim
127.0.0.1:6379> lpush list v1 v2 v3 v4
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6379> ltrim list 1 2  #通过下标截取指定的长度,这个list已经被改变了,只剩下截取后的元素
OK
127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"

#rpoplpush
127.0.0.1:6379> lpush list v1 v2 v3 v4 v5
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "v5"
2) "v4"
3) "v3"
4) "v2"
5) "v1"
127.0.0.1:6379> rpoplpush list newlist  #移除list集合中的最后一个元素到新的集合newlist中,返回值是移除的最后一个元素值
"v1"
127.0.0.1:6379> lrange list 0 -1
1) "v5"
2) "v4"
3) "v3"
4) "v2"
127.0.0.1:6379> lrange newlist 0 -1  
1) "v1"

(6)lset(更新)、linsert操作

#lset
127.0.0.1:6379> lrange list 0 -1
1) "v5"
2) "v4"
3) "v3"
4) "v2"
127.0.0.1:6379> lset list 1 newv4  #更新list集合中下标为‘1’的元素为‘newv4’
OK
127.0.0.1:6379> lrange list 0 -1  #查看证明更新成功
1) "v5"
2) "newv4"
3) "v3"
4) "v2"

#注意:
127.0.0.1:6379> lset list1 0 newv1  #如果指定的‘集合’不存在,报错
(error) ERR no such key
127.0.0.1:6379> lset list 6 newv1  #如果集合存在,但是指定的‘下标’不存在,报错
(error) ERR index out of range


#linsert
127.0.0.1:6379> lrange list 0 -1
1) "v5"
2) "newv4"
3) "v3"
4) "v2"
127.0.0.1:6379> linsert list after v3 insertv3  #在集合中‘v3’元素之后加上一个元素
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "v5"
2) "newv4"
3) "v3"
4) "insertv3"
5) "v2"
127.0.0.1:6379> linsert list before v3 insertv3  #在集合中‘v3’元素之前加上一个元素
(integer) 6
127.0.0.1:6379> lrange list 0 -1
1) "v5"
2) "newv4"
3) "insertv3"
4) "v3"
5) "insertv3"
6) "v2"

总结:可以应用在消息队列、实时聊天、最新动态、排行榜等场景。

传送门----Redis的五大数据类型(二)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值