【Redis】五大基本类型命令详解

大家好,我是被白菜拱的猪。

一个热爱学习废寝忘食头悬梁锥刺股,痴迷于girl的潇洒从容淡然coding handsome boy。

基本数据类型

我们看Redis中文官网得知,Redis有五大数据类型,下面通过命令对他们进行一一介绍。
在这里插入图片描述

(一)字符串(strings)

1、设置值、获得值、追加值、获取字符串长度

127.0.0.1:6379> ping #检查是否连接成功
PONG
127.0.0.1:6379> set name nihao #设置值
OK
127.0.0.1:6379> get name #获得值
"nihao"
127.0.0.1:6379> set age 19
OK
127.0.0.1:6379> keys * #获取所有的key
1) "name"
2) "age"
127.0.0.1:6379> EXISTS name #判断一个key是否存在
(integer) 1
127.0.0.1:6379> APPEND name ,dashuaige #追加字符串,假如key不存在,则相当于set key
(integer) 15
127.0.0.1:6379> get name
"nihao,dashuaige"
127.0.0.1:6379> STRLEN name #查看字符串的长度
(integer) 15

2、自增自减

在微信公众号中,有一个文章的浏览量,这个数目不是每次点击就改变数据库中的值,这样对数据库访问压力太大,而是将此放在缓存中,每隔一段时间写入数据库。

127.0.0.1:6379> set views 0 #设置初始浏览量0
OK
127.0.0.1:6379> INCR views #使用INCR名来实现+1
(integer) 1
127.0.0.1:6379> INCR views
(integer) 2
127.0.0.1:6379> get views
"2"
127.0.0.1:6379> DECR views #使用DECR来实现-1
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> INCRBY views 10 #使用INCRBY来指定步长
(integer) 11
127.0.0.1:6379> get views
"11"
127.0.0.1:6379> DECRBY views 2
(integer) 9
127.0.0.1:6379> get views
"9"
127.0.0.1:6379> 

3、字符串范围getrange [x,x]

他跟java的substring不一样,substring是左闭右开,即(x,x]。

127.0.0.1:6379> get name
"nihao,dashuaige"
127.0.0.1:6379> GETRANGE name 0 2 #通过getrange来获得指定范围的值
"nih"
127.0.0.1:6379> GETRANGE name 0 -1 #最后一个索引为-1,来获取全部的值
"nihao,dashuaige"
127.0.0.1:6379> SETRANGE name 0 xx #使用setrange来替换相应位置的值
(integer) 15
127.0.0.1:6379> get name
"xxhao,dashuaige"

4、setex,setnx

setex(set with expire)设置过期时间,指定什么时候过期
setnx (set if not exist)不存在在设置,假如存在了就创建失败

127.0.0.1:6379> SETEX key1 5 wohuiguoqi #设置过期时间
OK
127.0.0.1:6379> ttl key1 #查看倒计时
(integer) 1
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> setnx key1 nihao
(integer) 1
127.0.0.1:6379> get key1
"nihao"
127.0.0.1:6379> setnx key1 hhh #key1已存在,则创建失败
(integer) 0
127.0.0.1:6379> get key1 #这里获取key1的值,还是第一次设置的值
"nihao"

5、mset,mget

mset同时设置多个key-value,mget同时获取多个key的值

127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3
OK
127.0.0.1:6379> keys *
1) "key2"
2) "key1"
3) "key3"
127.0.0.1:6379> mget key1 key2 key3
1) "value1"
2) "value2"
3) "value3"

对象:把user:1:name当做key

127.0.0.1:6379> set user:1:name ljl
OK
127.0.0.1:6379> get user
(nil)
127.0.0.1:6379> get user:1
(nil)
127.0.0.1:6379> get user:1:name
"ljl"

6、getset

先获取值在设置值,如果存在值,就先获取原先的值然后在设置新的值

127.0.0.1:6379> getset name nihao
(nil)
127.0.0.1:6379> get name
"nihao"
127.0.0.1:6379> getset name dashaibi
"nihao"
127.0.0.1:6379> get name
"dashaibi"
127.0.0.1:6379> 

结束语:String中可以是字符串也可是数字,它应用的场景非常的广泛,可以当做计数器,可以统计粉丝数,也可以对象缓存存储。

(二)列表(lists)

这里列表可以看做队列、栈…可以从右边插入也可以从左边插入,在操作list的命令一般以l开头,Redis不区分大小写。
在这里插入图片描述
下面我来熟悉一下列表的简单操作,添加数据、移除数据、获得某一索引的数据…

1、lpush、lpop、lrange

127.0.0.1:6379> clear
127.0.0.1:6379> LPUSH list nihao1 #从左边添加元素
(integer) 1
127.0.0.1:6379> LPUSH list nihao2
(integer) 2
127.0.0.1:6379> lpush list nihao3
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1 #获取所有元素
1) "nihao3"
2) "nihao2"
3) "nihao1"
127.0.0.1:6379> LPOP list #从左边弹出元素
"nihao3"
127.0.0.1:6379> LRANGE list 0 -1
1) "nihao2"
2) "nihao1"
127.0.0.1:6379> RPOP list #从右边弹出元素
"nihao1"
127.0.0.1:6379> LRANGE list 0 -1
1) "nihao2"

我们发现,在像list添加元素时是有方向的,然后我们可以想象把上面横着的那个图竖起来,就变成了一个队列。你看nihao1先添加进去时查出来是序号为3。
在这里插入图片描述

2、lindex

通过索引来取值,你会发现,没有rindex,通过索引取值就只能通过lindex来获取,你还会发现,这里的l不单单是指list的l,还值left的l,你就把上面的那个图牢记于心足以,另外它的缩影是从0开始的,而不是从1开始。

127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LINDEX list 1 #从左边开始数第二个数
"two"
127.0.0.1:6379> lindex list 0
"three"
127.0.0.1:6379> rindex list 3

3、llen

length长度,llen就是来查list中的长度的

127.0.0.1:6379> llen list
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> 

4、lrem

移除元素(remove)

127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LREM list 2 three #假如有多个相同的值,2代表要移除几个相同的元素
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lrem list 1 two
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lpush list three
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "one"
127.0.0.1:6379> lrem list 2 three
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "one"

5、ltrim

在java中trim是去掉左右的空格,在这里是裁剪的意思,会改变list中数据,使用lindex是获取相应对应索引的值,不会改变原先的list,ltrim则把范围外的值舍去。

127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> LTRIM list 1 2 #1,2 代表要裁剪出的范围
OK
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"

注意同样这里的范围也是从零开始,此时经过裁剪之后,原先的list已改变。

6、rpoplpush

从一个list从右边出来然后从左边进入到另一个list中,另一个list假如不存在也没事

127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> RPOPLPUSH list otherlist #otherlist不存在,则创建
"one"
127.0.0.1:6379> lrange otherlist 0 -1
1) "one"
127.0.0.1:6379> 

7、lset

替换元素,假如不存在则报错

127.0.0.1:6379> LSET list 0 nihao
OK
127.0.0.1:6379> lrange list 0 -1
1) "nihao"
2) "two"
127.0.0.1:6379> lset list 3 nihao
(error) ERR index out of range
127.0.0.1:6379> 

8、linsert

在指定元素前或者后插入元素

127.0.0.1:6379> LINSERT list before nihao hello
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "nihao"
3) "two"

Redis这里做的还是很人性的,每个命令都会有提示,会告诉你这里填什么,我们只需要大致记住这些命令就可以了,不用死记硬背,关键我们脑容量也不允许啊,适当偷偷懒还是可以的。

(三)集合(set)

我们发现像上面整理笔记有些浪费时间,每一条命令都复制粘贴过来,认真是认真,但是时间耗费太多导致效率不太高,所以下面采用默写的方式,按照框架意识默写出来。

集合我们高中就知道,集合里面的元素是无序且不重复的。每一种数据类型都离不开添加、删除、查询、修改,也就是获取值,覆盖之前的值。

  • sadd:添加值
  • smembers:查看指定集合的所有值
  • sismember:查看某一值是否存在
  • scard:获取指定集合元素的个数
  • srem:移除指定元素某一元素
  • smove:是将某一集合中的元素移动到另一个集合中

假如想实现抽奖的环节,我们可以使用以下指令获取值

  • srandmember:随机获取指定集合的元素,后面跟有数字,比如2,则随机获取两个元素
  • spop:随机移除指定集合中的元素

还有一种情景,如微博,b站。我们想要共同关注的人数,这就可以使用集合
集合中有并集、交集、差集

  • sunion:并集
  • sinter:交集
  • sdiff:差集

(四)散列(hash)

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。它存储的是key-value形式。一个hash可以存多个key-value。

  • hset:设置值
  • hget:获取值
  • hgetall:获得所有值
  • hdel:删除指定hash的key字段,对应的value也相应的被删除
  • hlen:获取hash表的字段数量
  • hexisits:判断hash中字段是否存在

只获得key或者只获得value

  • hkeys:只获得所有的key
  • hvals:只获得所有value
  • hincrby:指定增量
  • hsetnx:如果不存在可以设置,存在则不能设置

hash适合存储对象且内容经常变动的信息。

(五)有序集合(Zset)

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。

  • zadd:添加元素
  • zrangebyscore:根据分数进行排名
  • zrem:移除某一元素
  • zcard:获得有序集合中的个
  • zcount:获得指定区间中的成员数量

有序集合可以适用于排名,班级分数,top几啦等等。

以上都是最基础的命令,我们不会的还是要去官网里面查阅。

猜你喜欢

转载自blog.csdn.net/weixin_44226263/article/details/109059063
今日推荐