Redis篇——Redis操作五大数据类型(String、List、Set、Hash、Zset),一篇文章速通!史上最详细、最全面的保姆级命令总结!

String字符串

追加字符串

在原有的字符串上追加字符串内容

append key String

测试:
通过append命令,在原本的字符串后追加字符串

127.0.0.1:6379> APPEND name 666
(integer) 11
127.0.0.1:6379> get name
"zhangsan666"

注意:如果当前的key不存在,就相当于set一个key


获取字符串长度

strlen key #返回一个Integer类型的数字

测试:

127.0.0.1:6379> STRLEN name
(integer) 11

截取和替换字符串

一、截取字符串
相当于普通字符串中的subString方法
1、命令

getrange key start end

2、测试
截取字符串前4位

127.0.0.1:6379> set key1 helloworld
OK
127.0.0.1:6379> getrange key1 0 3 #相当于[0,3],两边都能取到
"hell"

3、拓展,查看所有的字符串

getrange key 0 -1 #相当于直接get key


二、替换字符串
1、命令

setrange key 替换位数 替换内容

2、测试

127.0.0.1:6379> set key1 asdfgh
OK
127.0.0.1:6379> get key1
"asdfgh"
127.0.0.1:6379> setrange key1 1 XXXX
(integer) 6
127.0.0.1:6379> get key1
"aXXXXh"
127.0.0.1:6379> 

实现自增和自减操作(常用在浏览量)

一、自增
1、命令

incr key

2、测试
设置字段views是浏览量的key,我希望每一次用户访问,key自动加一

127.0.0.1:6379> incr views
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> get views
"2"

二、自减
1、命令

decr key

 2、测试
让views这个key实现自减

127.0.0.1:6379> decr views
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> get views
"0"

三、实现自增个性化设置步长
1、命令

incrby key 自增步长

  2、测试
让views每次自增10

127.0.0.1:6379> INCRBY views 10
(integer) 10
127.0.0.1:6379> INCRBY views 10
(integer) 20
127.0.0.1:6379> get views
"20"

 四、自减,并设置步长
1、命令

decrby key 自减步长

   2、测试
让views实现自减10

127.0.0.1:6379> DECRBY views 10
(integer) 10
127.0.0.1:6379> DECRBY views 10
(integer) 0
127.0.0.1:6379> get views
"0"

 setex和setnx

一、创建key并设置过期时间
1、命令

setex key 过期时间 value

2、测试,设置一个key,30秒钟过期

127.0.0.1:6379>  setex key2 30 hello
OK
127.0.0.1:6379> get key2
"hello"
127.0.0.1:6379> ttl key2
(integer) 19

二、如果某个key不存在,则创建
1、命令

setnx key value

2、测试
如果该key不存在,则成功创建,返回1,如果库中该Key已经存在,那么返回0,创建失败

127.0.0.1:6379> setnx key3 aaa
(integer) 1
127.0.0.1:6379> keys *
1) "key3"
2) "key1"
127.0.0.1:6379> setnx key3 aaa
(integer) 0
127.0.0.1:6379> keys *
1) "key3"
2) "key1"

批量设置和获取值

一、批量设置数据
1、命令

mset   k1 v1 k2 v2 k3 v3 ......

2、测试

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k1"
3) "k2"

3、也可以实现如果某个key不存在,才能创建
这条命令是原子性的,即倘若有一个key数据库中是存在的,则都创建失败

msetnx k1 v1 k2 v2

二、批量获取数据
1、命令

mget k1 k2 k3 ......

2、测试

127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"

存储对象

1、命令

mset 对象名:id:k1 v1 对象名:id:k2 v2   #设置对象
mget 对象名:id:k1 对象名:id:k2   #获取对象

2、测试
我这是用的mset和mget,可以批量设置对象

127.0.0.1:6379>  mset user:1:name zhangsan user:1:age 2
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"

getset组合命令

1、命令

getset key value

2、测试

127.0.0.1:6379> getset k1 redis
(nil) #库中没有这个数据,则返回空
127.0.0.1:6379> get k1
"redis" #将新的value设置到key中
127.0.0.1:6379> getset k1 mysql
"redis" #如果库中该key存在value,那么返回本身的value
127.0.0.1:6379> get k1
"mysql" #然后将新的数据更新

List列表

存值和取值(含list列表命令的规则)

首先需要了解,在Redis中操作list,命令都是L开头的

一、存值
1、将数据插入到列表的头部(左边)命令
该命令的返回值是list的长度

lpush list v1

测试

127.0.0.1:6379> lpush list A
(integer) 1
127.0.0.1:6379> lpush list B
(integer) 2

2、将数据插入到尾部(右边)命令

rpush list v

测试

127.0.0.1:6379> rpush list z
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "C"
2) "B"
3) "A"
4) "z"

二、取值
1、获取全部列表的值的命令

lrange list 0 -1

测试

127.0.0.1:6379> lrange list 0 -1
1) "B"
2) "A"

2、获取区间列表数据,需要注意,我存数据的顺序的A B C,但是取值的时候是从列表左至右,类似于Java中的栈,后进先出(联想压子弹)

127.0.0.1:6379> lrange list 0 1
1) "C"
2) "B"

移除数据

一、左边移除第一个数据
1、命令
返回移除的数据

lpop list 

2、测试

127.0.0.1:6379> lrange list 0 -1
1) "C"
2) "B"
3) "A"
4) "z"
127.0.0.1:6379> lpop list
"C"

二、从右边移除第一个数据
1、命令
返回移除的数据

rpop list

2、测试

127.0.0.1:6379> rpop list
"z"
127.0.0.1:6379> lrange list 0 -1
1) "B"
2) "A"

三、移除指定的值
1、命令

lrem list count(移除几个数据) 元素

2、测试
移除list列表中的1个A元素

127.0.0.1:6379> lrem list 1 A
(integer) 1

3、拓展,移除多个相同的元素,只修改count即可

127.0.0.1:6379> lrange list 0 -1
1) "C"
2) "B"
3) "B"
4) "B"
127.0.0.1:6379> lrem list 2 B
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "C"
2) "B"

通过下标获取列表数据

1、命令

lindex list index

2、测试

127.0.0.1:6379> lrange list 0 -1
1) "B"
2) "A"
127.0.0.1:6379> lindex list 0
"B"

获取列表的长度

1、命令

llen list 

2、测试

127.0.0.1:6379> llen list
(integer) 2

截取指定下标的列表

1、命令

ltrim list start stop 

2、测试

127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> ltrim mylist 1 3
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "b"
2) "c"
3) "d"

移除列表的最后的元素添加到B的列表中

1、命令

rpoplpush list newlist

2、测试

127.0.0.1:6379> lrange mylist 0 -1
1) "b"
2) "c"
3) "d"
127.0.0.1:6379> rpoplpush mylist newlist
"d"
127.0.0.1:6379> lrange mylist 0 -1
1) "b"
2) "c"
127.0.0.1:6379> lrange newlist  0 -1 #查看新的列表
1) "d"

更新列表指定下标的元素

1、命令
这个命令会先判断库中是否存在该列表,如果不存在列表,更新就会报错;
如果存在列表,则就能更新数据;
如果列表中某个下标的元素不存在,更新也会报错

lset list index newElement

2、测试
把列表中的b更新成zhangsan

127.0.0.1:6379> lrange mylist 0 -1
1) "A"
2) "b"
3) "c"
127.0.0.1:6379> lset mylist 1 zhangsan
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "A"
2) "zhangsan"
3) "c"

往列表中插入元素

1、命令

linsert list before||after 列表参照元素 newElement

2、测试
往b的前边插入666

127.0.0.1:6379> lrange mylist 0 -1
1) "A"
2) "b"
3) "c"
127.0.0.1:6379> linsert mylist before b 666
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "A"
2) "666"
3) "b"
4) "c"

Set集合

存值和取值(含set集合命令的规则)

所有操作set的命令,前面都是以s开头

set和list的区别:set中的元素都是无序且不能重复的!!!!!!
一、存值
1、命令

sadd set element

2、测试
存值成功,返回1,失败则返回0

127.0.0.1:6379> sadd myset a
(integer) 1
127.0.0.1:6379> sadd myset b
(integer) 1

二、取值
1、查看所有的集合中的所有数据命令

smembers set

2、测试

127.0.0.1:6379> smembers myset
1) "a"
2) "b"
3) "c"
4) "d"

获取集合中元素的个数

1、命令

scard set

2、测试

127.0.0.1:6379> scard myset
(integer) 4

判断元素是否在set集合中

1、命令

sismember set element

2、测试
如果set集合中存在,则返回1,如果不存在,则返回0

127.0.0.1:6379> sismember myset a
(integer) 1

移除集合中指定的元素

1、命令

srem set element(集合中的元素)

2、测试

127.0.0.1:6379>  srem myset a
(integer) 1
127.0.0.1:6379> smembers myset
1) "b"
2) "c"
3) "d"

随机移除集合中的元素

1、命令

spop set

2、测试

127.0.0.1:6379> spop myset
"b"
127.0.0.1:6379> spop myset
"c"
127.0.0.1:6379> SMEMBERS myset
1) "d"

获取集合中指定个数的随机元素

因为set集合中的元素是无序的且不重复的,所以可以根据它无序的特点,获取随机的元素

1.命令

srandmember set 随机元素个数

2、测试

127.0.0.1:6379> SRANDMEMBER myset 2
1) "b"
2) "d"
127.0.0.1:6379> SRANDMEMBER myset 2
1) "b"
2) "d"
127.0.0.1:6379> SRANDMEMBER myset 2
1) "b"
2) "c"

将指定的元素,移动到另外的集合中

1、命令

smove set1 set2 element(被移动的元素)

2、测试

127.0.0.1:6379> SMEMBERS myset # 查看集合1中的元素
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> SMEMBERS myset1 # 查看集合2中的元素
1) "zhangsan"
2) "lisi"
127.0.0.1:6379> smove myset myset1 a #将集合1中数据移动到集合2
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "b"
2) "c"
3) "d"
127.0.0.1:6379> SMEMBERS myset1
1) "a"
2) "zhangsan"
3) "lisi"

查看两个集合的差集、交集和并集

一、差集
1、命令
该命令的含义是set1集合参照set2集合,有哪几个元素和set2是不同的

sdiff set1 set2

2、测试

127.0.0.1:6379> SMEMBERS myset
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> SMEMBERS myset1
1) "zhangsan"
2) "lisi"
127.0.0.1:6379> sadd myset1 a
(integer) 1
127.0.0.1:6379> SMEMBERS myset1
1) "a"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> sdiff myset myset1
1) "b"
2) "c"
3) "d"

二、交集
1、命令
查看两个集合共有的元素,将来可以用来编写共同关注等实际业务

sinter set1 set2

2、测试

127.0.0.1:6379> sinter myset myset1
1) "a"

三、并集
1、命令
两个集合中一共有多少元素

sunion set1 set2

2、测试

127.0.0.1:6379> sunion myset myset1
1) "c"
2) "d"
3) "b"
4) "lisi"
5) "a"
6) "zhangsan"

Hash哈希

存值和取值(含Hash命令的规则)

所有和Hash相关的命令都是以h开头的

理解Hash在Redis中的存储规则:
常规的是key-value
而Hash的规则是key(变量)-(key-value)

一、存一个值
1、命令

hset hash field(字段名) value(字段数据)

2、测试
存储成功返回1

127.0.0.1:6379> hset myhash field1 a
(integer) 1
127.0.0.1:6379> hset myhash field2 b
(integer) 1

二、取一个值
1、命令
通过字段,获取到value

hget hash filed(字段)

2、测试 

127.0.0.1:6379> hget myhash field1
"a"

三、批量存值
1、命令

hmset hash field1(字段名) value2(字段数据) field2 value2

2、测试
存储成功返回OK,如果原来hash中存在相同的字段,那么这个字段中的数据将会被覆盖

127.0.0.1:6379> hmset myhash field1 666 field2 777 field3 888
OK

四、批量取值
1、命令

hmget hash field1(字段名) field2

2、测试

127.0.0.1:6379> hmget myhash field1 field2
1) "666"
2) "777"

五、获取hash中所有的键和值,展示方式是一个键一个值
1、命令

hgetall hash

2、测试

127.0.0.1:6379> hgetall myhash
1) "field1"
2) "666"
3) "field2"
4) "777"
5) "field3"
6) "888"

删除哈希中指定key

1、命令

hdel hash field(字段名)

2、测试
删除成功返回1,key被删除,对应的value也就不存在了

127.0.0.1:6379> hgetall myhash
1) "field1"
2) "666"
3) "field2"
4) "777"
5) "field3"
6) "888"
127.0.0.1:6379> hdel myhash field1
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "777"
3) "field3"
4) "888"

获取hash中的key字段个数

1、命令

hlen hash 

2、测试

127.0.0.1:6379> hgetall myhash
1) "field2"
2) "777"
3) "field3"
4) "888"
127.0.0.1:6379>  hlen myhash
(integer) 2

判断hash中的key字段是否存在

1、命令

hexists hash(哈希表) field(字段)

2、测试

127.0.0.1:6379> hgetall myhash
1) "field2"
2) "777"
3) "field3"
4) "888"
127.0.0.1:6379> hexists myhash field1 #field1是不存在的,则返回0
(integer) 0
127.0.0.1:6379> hexists myhash field2 #存在则返回1
(integer) 1

只获取hash中的field字段或者value

1、命令

hkeys hash #获取所有的field字段

hvals hash #获取所有的字段对应的value

2、测试

127.0.0.1:6379> hkeys myhash
1) "field2"
2) "field3"
127.0.0.1:6379> hvals myhash
1) "777"
2) "888"

实现自增或自减

1、命令

hincrby hash field(字段名) 自增步长

2、测试

127.0.0.1:6379> hgetall myhash
1) "field2"
2) "777"
3) "field3"
4) "888"
5) "field4"
6) "2"
127.0.0.1:6379> hincrby myhash field4 1
(integer) 3
127.0.0.1:6379> hincrby myhash field4 -1 #步长设置成-1,就相当于自减1
(integer) 2

判断字段是否存在,如果存在,则创建失败

1、命令

hsetnx hash field(字段名) value(设置的值)

2、测试
如果表中,没有这个字段,则创建成功,返回1;
如果表中存在这个字段,则返回0,创建失败

127.0.0.1:6379> hsetnx myhash field5 hello
(integer) 1
127.0.0.1:6379> hsetnx myhash field5 world
(integer) 0

存储对象

1、命令

hset 对象名:id key value

2、测试

127.0.0.1:6379> hset user:1 name zhangsan 
(integer) 1
127.0.0.1:6379> hset user:1 age 12
(integer) 1
127.0.0.1:6379> hget user:1 name
"zhangsan"
127.0.0.1:6379> hget user:1 age
"12"

Zset有序集合

存值和取值(含Zset集合命令的规则)

Zset有序集合的命令,都是以z开头的
Zset和set的区别就是在他的基础上,增加了一个标识,可以用来排序。存值和获取值
1、命令

zadd zset 标识位 value # 存值,标识位可以按需求设置

zrange zset 0 -1 #查看zset集合中的所有数据

2、测试

127.0.0.1:6379>  zadd myzset 1 one #添加1个值
(integer) 1
127.0.0.1:6379> zadd myzset 2 two 3 three #添加多个值
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1 #查看集合中的所有数据
1) "one"
2) "two"
3) "three"

给数据排序

一、升序
1、命令

zrangebyscore zset -inf +inf #-inf +inf相当于负无穷到正无穷,当然了,后面的范围我们可以自定义!

zrangebyscore zset -inf +inf withscores #带上标志位的升序排序

2、测试

127.0.0.1:6379> zadd salary 1000 zhangsan #添加3个用户,模拟薪水问题,标志位模拟薪水
(integer) 1
127.0.0.1:6379> zadd salary 5000 lisi
(integer) 1
127.0.0.1:6379> zadd salary 30 wangwu
(integer) 1
127.0.0.1:6379> zrangebyscore salary -inf +inf #不带标志位,从小到大排序
1) "wangwu"
2) "zhangsan"
3) "lisi"

127.0.0.1:6379> zrangebyscore salary -inf +inf withscores #带上标志位的排序
1) "wangwu"
2) "30"
3) "zhangsan"
4) "1000"
5) "lisi"
6) "5000"

二、降序
1、命令

zrevrange zset 0 -1

2、测试

127.0.0.1:6379> zrevrange salary 0 -1
1) "lisi"
2) "zhangsan"

移除集合中的元素

1、命令

zrem zset element(集合中的元素)

2、测试

127.0.0.1:6379> zrange salary 0 -1
1) "wangwu"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> zrem salary wangwu
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "zhangsan"
2) "lisi"

查看有序集合中的元素个数

1、命令

zcard zset

2、测试
 

127.0.0.1:6379> zrange salary 0 -1
1) "zhangsan"
2) "lisi"
127.0.0.1:6379> zcard salary
(integer) 2

至此,关于Redis操作五大数据类型的命令全部总结完毕!命令比较复杂,笔者一次性将其归并到一篇文章里面,希望能够对大家掌握Redis的使用有帮助。建议收藏,反复浏览消化!

后续还会持续更新关于Redis等技术栈分享,敬请期待!

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Be explorer

若认可笔者文章,手头富裕望支持

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

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

打赏作者

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

抵扣说明:

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

余额充值