本文主要介绍redis中常见的几种数据类型的基本命令行操作
更新于 2021-04-18
String类型
字符串是redis中最基础的数据类型,最多可以容纳512M的数据长度。
数据增删改查
使用set
指令可以在redis中存string类型的数据,格式如下:
1 | # 存数据 |
redis数据都是键值对,所以需要一个key和对应的value;key不要过长,否则会消耗很多内存,最好有统一的命名规范保证可读性。
使用get
指令可以在redis中取string类型的数据,格式如下:
1 | # 取数据 |

获取所有的key,可以使用如下的方式:

使用del
指令可以删除指定key下的数据,其格式如下:
1 | del [key] |
例如:

返回1说明删除成功,再次获取这个key对应的value的时候返回nil
getset重新赋值
getset
命令会先获取key对应的value值,然后在对key重新复制,其格式如下:
1 | getset [key] [value] |
例如:

value自增和自减
incr
和decr
命令可以分别让key对应的value自增1和自减1:
- 如果value是整型,则自增或自减1;
- 如果无法转换成整型,则报错;
- 如果key不存在,则创建这个key并并赋初始值0,然后自增或自减1;
其格式如下:
1 | incr [key] |
数值类型自增

key不存在时

value无法转换为整型

指定步长
默认incr
和decr
的步长都是1,但是incrby
和decrby
可以指定自增和自减的步长单位,其用法和incr
与decr
一致,格式如下:
1 | incrby [key] [步长] |
例如:

字符串追加
append
命令可以在指定key的value后面追加字符串。如果key不存在,则会创建这个key并将需要追加的内容作为value赋值,其格式如下:
1 | append [key] [追加的内容] |
例如:

hash类型
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储海量的键值对。
使用hset
和hget
可以分别对hash类型的数据进行存取操作,hset
和hget
只能一次存入和读取一对键值对,使用hmset
和hmget
可以一次存入和读取多个键值对。
使用hgetall可以获取到hash数据的所有值,其格式如下:
1 | hset [key] [属性key] [属性value] |
例如:

hdel
和del
可以删除hash类型数据中属性以及其值,格式如下:
1 | hdel [key] [属性1] [属性2]... |
例如:

hash类型自增
hincrby
操作可以给hash类型属性的值增加指定的单位,其格式如下:
1 | hincrby [key] [属性] [步长] |
例如:

获取所有属性名称和值
hkeys
和hvals
分别可以获得hash中所有的keys和所有的values,其格式如下:
1 | hkeys [key] |
例如:

获取属性的个数
hlen
可以获得hash中属性的个数,其格式如下:
1 | hlen [key] |
例如:

判断属性是否存在
hexists
可以判断hash中某个属性是否存在,存在则返回1,不存在则返回0,其格式如下:
1 | hexists [key] [属性] |
例如:

list类型
list类型是按照插入顺序排序的字符串列表,和数据结构中普通列表是一样的。可以在其头部和尾部插入新元素。插入时如果key不存在,则会为其创建新的列表;如果列表中的所有元素都被移除,那么这个key也会从数据库中移除。
向列表头尾插入和删除元素是比较高效的。如果插入和删除操作位于列表中间,则效率比较低。
列表两端添加
lpush
可以从左侧向列表中添加数据,如果添加的key不存在,则会创建,其格式如下:
1 | lpush [key] [value1] [value2] ... |
例如:

第一次添加将创建名为mylist的列表,从返回值可以看出,经过两次添加,列表长度为6。先添加的数据会被后添加的数据挤到右侧。
rpush
可以从右侧向列表中添加数据,如果添加的key不存在,则会创建,其格式如下:
1 | rpush [key] [value1] [value2] ... |
例如:

先添加的数据会被后添加的数据挤到左侧。
查看列表
lrange
可以从左侧为起点查看列表,lrange
也可以指定起始和结束的索引位置,其格式如下:
1 | lrange [key] [起始索引] [结束索引] |
例如:

两端弹出
lpop
和rpop
可以实现左端和右端弹出列表第一个元素,如果不存在则弹出nil,其格式如下:
1 | lpop [key] |
例如:

注意,只要是弹出,则这个元素在列表中将不再存在。
获取元素个数
llen
可以获取指定list中的元素的个数,其格式如下:
1 | llen [key] |
例如:

在头部添加元素
lpushx
和rpush
可以在指定的list的头部和尾部添加元素,其格式如下:
1 | lpushx [key] [value] |
例如:

这种方式仅对已存在的list有效,如果指定的key为不存在的list,则返回0。
删除元素
lrem
可以删除在指定list中count个值为value的元素,如果count大于0则在删除时从头部到尾部依次遍历删除,如果count小于0则在删除时从尾部到头部部依次遍历删除,如果count为0则删除所有值为value的元素,其格式如下:
1 | lrem [key] [count] [value] |
例如:

插入元素
lset
来通过索引来添加元素,其格式为:
1 | lset [key] [index] [value] |
例如:

使用linsert
在指定的元素前或后插入新的元素,其格式如下:
1 | linsert [key] [before|after] [已存在的元素] [value] |
例如:

rpoplpush指令
rpoplpush
指令可以将一个list的尾部元素弹出,并加入另一个list的头部,其格式如下:
1 | rpoplpush [source list] [target list] |
例如:

这个指令的使用场景是:使用redis作为消息队列时,消费者从队列中取出数据进行处理。若此时消费者程序错误崩溃,那么此时取出的数据可以认为已经丢失,这将对业务数据的完整性造成影响。rpoplpush可以让消费者程序将消息从主队列取出放到备份队列中,实现备份的功能。
set类型
set类型可以看做没有排序的字符集合,可以对其执行添加、删除等操作。和list不同的是,set集合不允许出现重复元素。如果对set类型反复存入多个相同的元素,则只会保存一个。set最大包含40亿个元素。
添加元素
sadd
可以向set中添加元素,其格式如下:
1 | sadd [key] [value1] [value2] ... |
例如:

从返回值看,第二次添加a元素失败了,因为a已经存在,set不允许重复
查看元素
smembers
来查看set中的元素,其格式如下:
1 | smembers [key] |
例如:

删除元素
srem
可以删除set中的元素,其格式如下:
1 | srem [key] [value1] [value2] ... |
例如:

判断元素是否存在
sismember
可以判断指定元素是否存在于set中,其格式如下:
1 | sismember [key] [target] |
例如:

存在则返回1,不存在则返回0。
差集运算
sdiff
可以计算出两个set集合的差集,其格式如下:
1 | sdiff [key1] [key2] ... |
其中key的顺序将影响计算的结果,计算方式是第一个key中有的而后面key中没有的,例如:

可以使用sdiffstore
将集合的差集存储到新的set中,其格式如下:
1 | sdiffstore [new set] [key1] [key2] ... |
例如:

交集运算
使用sinter可以计算set集合的交集,其格式如下:
1 | sinter [key1] [key2] ... |
例如:

可以使用sinterstore
将集合的交集存储到新的集合中,其格式如下:
1 | sinterstore [new set] [key1] [key2] ... |
例如:

并集运算
使用sunion
可以计算集合的并集,其格式如下:
1 | sunion [key1] [key2] ... |
例如:

可以使用sunionstore
将集合的并集存储到新的set中,其格式如下:
1 | sunionstore [new set] [key1] [key2] ... |
例如:

获取元素个数
使用scard
可以获取集合中元素的个数,其格式如下:
1 | scard [key] |
例如:

随机返回set元素
srandmember
可以随机返回set中的一个元素,其格式如下:
1 | srandmember [key] |
例如:

其他操作
查看key
keys指令如果跟上 * 则表示查看所有的key,也可以和正则表达式结合来查看指定规则的key,例如:
1 | 127.0.0.1:6379> keys my? |
判断key是否存在
使用exists
可以判断key是否存在,存在则返回1,不存在则返回0,例如:
1 | 127.0.0.1:6379> exists company |
key重命名
使用rename
可以将一个key重命名,例如:
1 | 127.0.0.1:6379> get company |
设置key过期时间
可以使用expire
来设置key的过期时间,单位是秒,过期后key将被删除,配套使用ttl可以看到key所剩余的时间,例如:
1 | 127.0.0.1:6379> expire newcompany 10 |
\没有设置超时时间的key在使用ttl指令时会返回-1。**
获取key的类型
使用type
可以获取到key的类型,例如:
1 | 127.0.0.1:6379> type myb2 |