Redis教程

Redis学习 --基本命令篇

本文主要是介绍Redis学习 --基本命令篇,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在查看Redis所具备的命令时,可以通过在官网:(https://redis.io/commands/)查看redis所具备的命令大全

 

一:通用命令

常见的通用命令有:KEYS、DEL、EXISTS、EXPIRE、TTL

命令 描述
KEYS 查看符合模板的所有key,比较占用内存,不建议在正式环境使用
DEL 删除一个指定的key
EXISTS 判断key是否存在
EXPIRE 给一个key设置有效期,有效期到期时该key会被自动删除
TTL 查看一个KEY的剩余有效期

我们可以使用help [command]查看一个命令的用法:如下,我查看一个keys命令的用法:help keys

1、keys命令

(1)查询当前所有已存在的key:keys *

(2)查看当前以n开头的key: key n*

2、DEL命令

(1)删除name: del name

(2)删除多个key:del k1 k2 k3

下面我先批量增加key:mset k1 v1 k2 v2 k3 v3

然后删除上面增加的key:del k1 k2 k3

3、EXISTS命令

首先我先创建两个k v{name:lrc,age:18}:mset name lrc age 18

然后我判断是否存在name的key和是否存在single的key:exist name ;  exit single

4、EXPIRE命令

首先给age设置一个10秒有限期:expire age 10

然后查看age剩余的删除时间:TTL age

查看未设置有效期的key的默认有效期:

 

 

二、String类型命令

String类型是Redis中最简单的存储类型,该类型数据的value是字符串,根据value的不同,又可以区分成3个类型:

  • String:普通字符串
  • Int:整数类型
  • Float:浮点类型

不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m

 

String的常见命令有:

命令 描述
SET 添加或者修改已经存在的一个String类型的键值对
GET 根据key获取String类型的value
MSET 批量添加多个String类型的键值对
MGET 根据多个key获取多个String类型的value
INCR 让一个整型的key自增1
INCRBY

让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2

INCRBYFLOAT:让一个浮点类型的数字自增并指定步长

INCRBYFLOAT 让一个浮点类型的数字自增并指定步长
SETNX 添加一个String类型的键值对,前提是这个key不存在,否则不执行
SETEX 添加一个String类型的键值对,并且指定有效期

 

1、SET命令和GET命令

(1)如果添加的key不存在,则会添加对应的value

(2)如果添加的key存在,则会覆盖value:

2、MSET和MGET

一次性添加如{k1:v1,k2:v2,k3:v3}的数据,然后一次性获取k1,k2,k3的值

 

3、INCR和INCRBY和INCRFLOAT

(1)INCR递增1

(2)使用INCRBY设置每次递增3

(3)使用INCRBYFLOAT每次递增0.8

 

4、SETNX命令

(1)如果key存在,就不会新增:

(2)如果key不存在,则进行新增

 

5、SETEX命令

(1)添加{k5:v5},并设置有效期10秒

 

三:层架格式的数据

引入:我们通常会有多个名称一样的key,但是又代表不同的含义,如id可以时user_id,product_id等,那么这个时候,我们通常需要使用层级数据进行存储。层级格式如下:

项目名:业务名:类型:id

例如:我们的项目叫taobao,有user和producet两种不同数据类型数据,那么我们就可以这样定义key:

user相关的key:taobao:user:id

product相关的key:taobao:product:id

 

下面我们通过层级格式新建下面json数据的key和value。

set taobao:user:1 '{"id":1, "name":"Jack", "age": 21}'

set taobao:user:2 '{"id":2, "name":"Rose", "age": 18}'

set taobao:product:1 '{"id":1, "name":"小米11", "price": 4999}'

set taobao:product:2 '{"id":2, "name":"荣耀6", "price": 2999}'

我们在可视化界面就可以清楚看到层级的关系:

 

 

四:Hash类型命令

Hash类型,也叫散列,其value是一个无序字典,相当于Java中的HashMap结构。

引入:上边我们在使用String类型存储user,product对象数据时,由于value值是一个普通字符串,对某个字段进行修改时很不方便,那么就可以引入Hash类型,在value值又分割field和value字段,可以针对value的各个字段进行操作。

下面画表格类型区别两种类型的区别:

在使用String类型存储的时候:

key value
taobao:user:1 {"id":1, "name":"Jack", "age": 21}
taobao:user:2 {"id":2, "name":"Rose", "age": 18}

使用String类型存储这种数据类型的,对value值下的不同字段做操作是比较复杂的。

 

那么使用Hash类型存储的时候,存储格式改变成了如下表格:

key value
field value
taobao:user:1 id 1
name Jack
age 21
taobao:user:2 id 2
name

Rose

age

18

 

Hash类型的常用命令:

命令 描述
HSET

添加或者修改hash类型key的field的值

HGET 获取一个hash类型key的field的值
HMSET 批量获取多个hash类型key的field的值
HMGET 批量获取多个hash类型key的field的值
HGETALL 获取一个hash类型的key中的所有的field和value
HKEYS 获取一个hash类型的key中的所有的field
HVALS 获取一个hash类型的key中的所有的value
HINCRBY 让一个hash类型key的字段值自增并指定步长
HSETNX 添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

 

1、HSET与HGET命令

(1)新增一个user3,数据为:'{"id":3,"name":"tom","age":22}'

HSET taobao:user:3 id 3

HSET taobao:user:3 name tom

HSET taobao:user:3 age 22

我们用可视化工具查看存储的结构:

(2)查看user:3下的name:HGET taobao:user:3 name

 

2、HMSET与HMGET与HGETALL命令

(1)使用HMSET新增一个user4,数据为'{"id":4,"name":"lisi","age":28}':HMSET taobao:user:4 id 4 name lisi age 28

(2)使用HMGET查看user4所有value信息:HMGET taobao:user:4 id name age

(3)使用HGETALL查看user4所有的field,value信息:HGETALL taobao:user:4

 

3、HKEYS与HVALS命令。

(1)使用HKEYS获取user4所有的key信息:HKEYS taobao:user:4

(2)使用HVALS获取user4所有的values信息:HVALS taobao:user:4

 

4、HINCRBY命令

对user4的age字段自增2:HINCRBY taobao:user:4 age 2

 

5、HSETNX命令

(1)给user4增加已存在的age字段,则不会增加:HSETNX taobao:user:4 age 20

(2)给user4增加不存在的single字段,则会增加该字段:HSETNX taobao:user:4 single yes

 

 

五:List类型命令

概述:List类型类似于Java中的LinkedList,可以看做是一个双向链表。

List类型的常见命令:

命令 描述
LPUSH 向列表左侧插入一个或多个元素
LPOP 移除并返回列表左侧的第一个元素,没有则返回nil
RPUSH 向列表右侧插入一个或多个元素
RPOP 移除并返回列表右侧的第一个元素
LRANGE 返回一段角标范围内的所有元素
BLPOP和BRPOP 与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

List类型存取示意图:

 

1、LPUSH和LPOP命令

(1)使用LPUSH向左插入一个users列表数据,包含user1,user2,user3,user4:LPUSH users user1 user2 user3 user4

在可视化界面的存储结构为:

(2)使用LPOP取最左边一个数据,由于上边LPUSH是将每个数据都在左边添加,所以取到的数据是:user4

执行了LPOP后,就会返回数据并移除,类似于栈结构的后进先出原则,在可视化界面可以看到user4已被移除

 

2、RPUSH和RPOP命令

(1)使用RPUSH向右插入users列表数据,包含user5,user6,user7,user8:RPUSH users user5 user6 user7 user8

(2)使用RPUSH取最右端一个数据,由于上边RPUSH是每次在右边添加数据,所以最终拿到的数据是:user8

执行后,user8被返回并移除:

 

3、LRANGE命令

返回下标1到3的数据:LRANGE users 1 3

 

4、BLPOP和BRPOP命令

(1)使用LPOP取数据的时候,如果没有该数据会立刻返回nil:如:LPOP users2

(2)使用BLOP取数据的时候,如果没有该数据,会等待指定时间,超过时间还没等到才返回nil,如:BLOP user2 100

此时如果在另一个客户端100s内增加了user2,则就会返回响应数据,下面在另一个客户端增加user2数据:

 

5、模拟栈结构进行信息存取

LPUSH->LPOP或者RPUSH->RPOP

6、模拟队列结构进行信息存取

LPUSH->RPOP或者RPUSH->LPOP

 

 

六、SET类型命令

Set类型结构与Java的HashSet类似,可以看做是一个value为null的HashMap。

Set类型的常见命令:

命令 描述
SADD 向set中添加一个或多个元素
SREM 移除set中的指定元素
SCARD

返回set中的元素个数

SISMEMBER 判断元素是否在set中
SMEMBERS 获取set中的所有元素
SINTER 求多个set集合的交集
SDIFF

求多个set集合的差集

SUNION 求多个set集合的并集

 

1、SADD命令

创建一个s1集合包含有a,b,c三个数据:SADD s1 a b c 

 

2、SREM命令

从s1中删除c元素:SREM s1 c

 

3、SCARD命令

获取s1的元素个数:SCARD s1

 

4、SMEMBERS命令

获取s1的所有值:SMEMBERS s1

 

5、SISMEMBER命令

判断s1是否包含了c:SISMEMBER s1 c

 

6、SINTER、SDIFF、SUNION命令。

这三个命令相当于高中数学的集合,SINTER求交集,SDIFF求差集,SUNION求并集

下面再新建一个s2集合:bcde

(1)s1与s2的交集应该为:b

(2)s1与s2的差集应该为:a

(3)s1与s2的并集应该为:a b c d e

 

七:SortedSet类型

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序。

SorterSet的常用命令:

命令 描述
ZADD

添加一个或多个元素到sorted set ,如果已经存在则更新其score值

ZREM 删除sorted set中的一个指定元素
ZSCORE

获取sorted set中的指定元素的score值

ZRANK 获取sorted set 中的指定元素的排名
ZCARD

获取sorted set中的元素个数

ZCOUNT 统计score值在给定范围内的所有元素的个数
ZINCRBY 让sorted set中的指定元素自增,步长为指定的increment值
ZRANGE 按照score排序后,获取指定排名范围内的元素
ZRANGEBYSCORE 按照score排序后,获取指定score范围内的元素
ZDIFF 求差集
ZINTER 交集
ZUNION 并集

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可

 

练习题:

将班级的下列学生得分存入Redis的SortedSet中:

Jack 85, Lucy 89, Rose 82, Tom 95, Jerry 78, Amy 92, Miles 76

  • 并实现下列功能:
  • 删除Tom同学
  • 获取Amy同学的分数
  • 获取Rose同学的排名
  • 查询80分以下有几个学生
  • 给Amy同学加2分
  • 查出成绩前3名的同学

查出成绩80分以下的所有同学

 

1、添加学生信息到SortedSet中:ZADD studet 85 Jack 89 Lucy 82 Rose 95 Tom 78 Jerry 92 Amy 76 Miles

在可视化界面看看存储结构:

2、删除Tom同学:ZREM student Tom

3、获取Amy同学的分数:ZSCORE student Amy

4、获取Rose同学的排名:ZRANK student Amy

5、获取80分以下有几个学生:ZCOUNT student 0 80

6、给Amy同学加2分:ZINCRBY student 2 Amy

7、查出成绩前3名的同学:ZRANGE student 0 2 

8、查出成绩80分以下的所有同学:ZRANGEBYSCORE student 0 80

这篇关于Redis学习 --基本命令篇的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!