本文主要介绍
Redis
常用的基本操作命令和数据类型操作命令,也就是Redis
的基本使用。通过学习本文,应该可以完成Redis
数据库的入门。没有太多技术上的难度,今后可以将本文作为一个命令查询的字典。
基本操作命令
redis
默认为16个库(在 redis.conf
文件可配置),默认自动使用0号库。
配置
databases 16
修改数据库的个数
在 redis.conf
文件中修改 databases 16
。比如:修改为 databases 10
后,当前可使用第0~9个数据库。
基本命令
ping
沟通命令,查看状态
输入 ping
, redis
给我们返回 PONG
,表示 redis
服务运行正常
dbsize
查看当前数据库中
key
的数量
返回数字, key
的数量
select db
切换数据库。使用其他数据库,命令是
select index
例如: select 5
切换到第5个数据库
flushdb
删除当前数据库的数据,正式环境慎用!
quit
退出数据库(未关闭数据库)
Key
的操作命令
keys
查找所有符合模式
pattern
的key
,pattern
可以使用通配符。
语法: keys pattern
通配符:
*
:表示0-多个字符,例如:keys *
查询所有的key。?
:表示单个字符,例如:wo?d
,匹配word
,wood
exists
判断
key
是否存在
语法: exists key [key...]
返回值: 整数,存在 key
返回1,其他返回0。使用多个 key
,返回存在的 key
的数量。
例如: exists k1
、 exists k1 k2
expire
设置
key
的存活时间,超过时间,key
自动删除。单位是秒。
语法: expire key seconds
返回值:设置成功返回1,其他返回0。
例如:
ttl
以秒为单位,返回
key
的剩余生存时间(ttl: time to live
)
语法: ttl key
返回值:
-1 :没有设置
key
的存活时间,key
永不过期。例如:ttl k1 -1
-2 :
key
不存在。例如:ttl k1 -2
数字:
key
的剩余时间,秒为单位。例如:ttl k1 5
应用场景:用户注册-验证码的过期时间
type
查看
key
所存储值的数据类型
语法: type key
返回值:字符串表示的数据类型
none
:key
不存在string
:字符串list
:列表set
:集合zset
:有序集hash
:哈希表
del
删除存在的
key
,不存在的key
忽略。
语法: del key [key...]
返回值:数字,删除的 key
的数量
数据类型操作命令
Redis
中有5种数据类型: string
、 hash
、 list
、 set
、 zset
。
字符串类型 string
字符串类型是 Redis
中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据,序列化后的数据, JSON
化的对象甚至是一张图片。最大 512M
。
例如: "{'name':'leon','age':25}"
基本命令
set
将字符串值
value
设置到key
中
语法: set key value
get
查看已经插入的
key
。如果值不存在,返回(nil)
,相当于null
语法: get key
incr
将
key
中存储的数字值加1,如果key
不存在,则key
的值先被初始化为0,再执行incr
操作(只能对数字类型的数据操作)
语法: incr key
特性:具备原子性,是线程安全的
decr
将
key
中存储的数字值减1,如果key
不存在,则key
的值先被初始化为0,再执行decr
操作(只能对数字类型的数据操作)
语法: decr key
特性:具备原子性,是线程安全的
append
如果
key
存在,则将value
追加到key
原来旧值的末尾如果
key
不存在,则将key
设置值为value
语法: append key value
返回值:追加字符串之后的总长度
常用命令
strlen
返回
key
所存储的字符串值的长度
语法: strlen key
返回值:
如果
key
存在,返回字符串值的长度如果
key
不存在,返回0
getrange
获取
key
中字符串值从start
开始到end
结束的子字符串,包括start
和end
,负数表示从字符串的末尾开始,-1表示最后一个字符。字符串从0开始。(不存在的key
返回空字符串""
)
语法: getrange key start end
返回值:截取的子字符串
例子: set school bjpowernode
getrange school 2 6
:取power
getrange school -4 -1
:取node
getrange school -1 -4
:空字符串""
getrange schools -4 -1
:空字符串""
setrange
用
value
覆盖(替换)key
的存储的值从offset
开始,不存在的key
当作空白字符串处理。
语法: setrange key offset value
返回值:修改后的字符串的长度
例子: set item tmocat
-
setrange item 1 om
:将mo
替换为om
,返回值为6
mset
同时设置一个或多个
key-value
对
语法: mset key value [key value...]
返回值:OK
例如: mset k1 v1 k2 v2
mget
获取所有(一个或多个)给定
key
的值
语法: mget key [key...]
返回值:包含所有 key
的列表
例子:
mget k1 k2
返回值:v1
、v2
mget k1 k-not k2
返回值:v1
、(nil)
、v2
哈希类型 hash
Redis hash
是一个 string
类型的 field
和 value
的映射表, hash
特别适合用于存储对象。
例如:存储用户登录的session会话信息,实现多服务器之间的会话共享。
基本命令
hset
将哈希表
key
中的域field
的值设为value
,如果key
不存在,则新建hash
表,执行赋值,如果有field
,则覆盖值。
语法: hset hash表的key field value
返回值:
如果
field
是hash
表中新field
,且设置值成功,返回1如果
field
已经存在,旧值覆盖新值,返回0
例子:
hset website baidu www.baidu.com
:设置名为website
的hash
表中的baidu
的值为www.baidu.com
(添加新值)hset website baidu http://www.baidu.com
:设置名为website
的hash
表中的baidu
的值为http://www.baidu.com
(旧值被覆盖)
hget
获取哈希表
key
中给定域field
的值
语法: hget key field
返回值: field
域的值,如果 key
不存在或者 field
不存在,返回 nil
hmset
同时将多个
field-value
(域-值)设置到哈希表key
中,此命令会覆盖已经存在的field
,hash
表key
不存在,创建空的hash
表,执行hmset
语法: hmset key field value [field value...]
返回值:设置成功返回 OK
,如果失败返回一个错误
hmget
获取哈希表
key
中一个或多个给定域的值
语法: hmget key field [field...]
返回值:返回和 field
顺序对应的值,如果 field
不存在,返回 nil
hgetall
获取哈希表
key
中所有的域的值
语法: hgetall key
返回值:以列表形式返回 hash
中域和域的值,如果 key
不存在,返回空 hash
hdel
删除哈希表
key
中一个或多个指定域field
,不存在field
直接忽略
语法: hdel key field [field...]
返回值:成功删除的 field
的数量
常用命令
hkeys
查看哈希表
key
中的所有field
域
语法: hkeys key
返回值:包含所有 field
的列表, key
不存在返回空列表
hvals
查看哈希表
key
中的所有field
域的值
语法: hvals key
返回值:包含哈希表所有域值的列表, key
不存在返回空列表
hexists
查看哈希表
key
中,给定域field
是否存在
语法: hexists key field
返回值:如果 field
存在,返回 1,其他返回0
列表 list
Redis
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
基本命令
lpush
将一个或多个值
value
插入到列表key
的表头(最左边),从左边开始加入值,从左到右的顺序依次插入到表头。
语法: lpush key value [value...]
返回值:数字,新列表的长度
例子:
-
lpush mylist a b c
:往mylist
列表中插入a 、b、c三个值,插入后,列表的值顺序为: c、b、a。
rpush
将一个或多个值
value
插入到列表key
的表头(最右边),从左边开始加入值,从左到右的顺序依次插入到表尾。
语法: rpush key value [value...]
返回值:数字,新列表的长度
例子:
-
lpush mylist a b c
:往mylist
列表中插入a 、b、c三个值,插入后,列表的值顺序为: a、b、c。
lrange
获取列表
key
中指定区间内的元素(取区间元素)。列表第一个元素下标从 0 开始;start
和stop
是列表的开始和结束下标。下标为负数,意为从右侧取数。
语法: lrange key start stop
返回值:区间内的元素
例子: lpush mylist a b c d e
lrange mylist 1 3
:返回b、c、dlrange mylist -3 -2
:返回c、dlrange mylist -1 -1
:返回elrange mylist 0 -1
:返回全部元素lrange mylist 0 100
:返回满足条件的所有元素
lindex
获取列表
key
中指定下标的元素(取单个元素)。只是查询操作,元素不会被删除。列表第一个元素下标从 0 开始,start
和stop
是列表的开始和结束下标。下标为负数,意为从右侧取数。
语法: lindex key index
返回值:指定下标的元素; index
不在列表范围,返回 nil
llen
获取列表
key
的长度。
语法: llen key
返回值:数值,列表的长度; key
不存在,返回0。
常用命令
lrem
根据参数
count
的值,移除列表中与参数value
相等的元素,count > 0
,从列表的头部(左侧)向右开始移除;count < 0
从列表尾部(右侧)开始移除;count = 0
移除表中所有与value
相等的值。
语法: lrem key count value
返回值:数值,移除的元素个数
lset
将列表
key
下标为index
的元素的值设置为value
。
语法: lset key index value
返回值:设置成功返回 OK
; key
不存在或者 index
超出范围,返回错误信息。
linsert
将值
value
插入到列表key
当中位于值pivot
之前或之后的位置。key
不存在,pivot
不在列表中, 不执行任何操作。
语法: linsert key BEFORE|ALFTER pivot value
返回值:命令执行成功,返回新列表的长度。没有找到 pivot
返回 -1
集合类型 set
Redis
的 set
是 string
类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据。
基本命令
sadd
【新增】将一个或多个
member
元素加入到集合key
当中,已经存在于集合的member
元素将被忽略,不会再加入。添加操作是无序的。
语法: sadd key member [member...]
返回值:加入到集合的新元素的个数。不包括被忽略的元素。
smembers
【查询】获取集合
key
中的所有成员元素,不存在的key
视为空集合。
语法: smembers key
返回值:所有成员元素。
sismember
判断
member
元素是否是集合key
的成员。
语法: sismember key member
返回值: member
是集合成员返回 1 ,其他返回 0 。
scard
获取集合里面的元素个数。
语法: scard key
返回值:数字, key
的元素个数。其他情况返回 0 。
srem
删除集合
key
中的一个或多个member
元素,不存在的元素被忽略。
语法: srem key member [member...]
返回值:数字, key
的元素个数。其他情况返回 0 。
常用命令
srandmember
只提供
key
,随机返回集合中一个元素,元素不删除,依然在集合中;提供了count
时,count
正数,返回包含count
个数元素的集合,集合元素各不相同。count
是负数,返回一个count
绝对值的长度的集合,集合中元素可能会重复多次。
语法: standmember key [count]
返回值:一个元素;多个元素的集合。
spop
随机从集合中删除一个元素,
count
是删除的元素个数。
语法: spop key [count]
返回值:被删除的元素, key
不存在或空集合返回 nil
有序集合类型 zset
(sorted set)
Redis
有序集合 zset
和集合 set
一样也是 string
类型元素的集合,且不允许重复的成员。
不同的是 zset
的每个元素都会关联一个分数(分数可以重复,可以是整数), redis
通过分数来为集合中的成员进行从小到大的排序。
基本命令
zadd
【增改】将一个或多个
member
元素及其score
值加入到有序集合key
中,如果member
存在集合中,则更新值;score
可以是整数或浮点数,最多保留两位小数。如果key
不存在,会自动创建
语法: zadd key score member [score member...]
返回值:数字,新添加的元素个数
例子:
zadd student 60 zhangsan 72 lisi 80 wangwu
zrange
【查询】查询有序集合,指定区间内的元素。集合成员按
score
值从小到大来排序。start
,stop
都是从 0 开始。WITHSCOPES
X、选项让score
和value
一同返回。
语法: zrange key strat stop [WITHSCOPES]
返回值:数字,新添加的元素个数
zrevrange
返回有序集
key
中,指定区间内的成员。其中成员的位置,按score 值递减(从小到达)来排列。其它同krange
命令。
语法: zrevrange key strat stop [WITHSCOPES]
返回值:自定区间的成员集合
zrem
删除有序集合
key
中的一个或多个成员,不存在的成员被忽略。
语法: zrem key member [member...]
返回值:被成功删除的成员变量,不包括被忽略的学员。
zcard
获取有序集
key
的元素成员的个数。
语法: zcard key
返回值: key
存在返回集合元素的个数, key
不存在,返回 0 。
常用命令
zrangebyscore
获取有序集
key
中,所有score
值介于min
和max
之间(包括min
和max
)的成员,有序成员是按递增(从小到大)排序。
- 使用符号
(
表示不包括
min
,max
可以使用-inf
,+inf
表示最小和最大
limit
用来限制返回结果的数量和区间
withscores
显示score
和value
语法: zrangebyscore key min max [WITHSCORES][LIMIT offset count]
返回值:从小到大排序的指定区间的集合数据
zrevrangebyscore
获取有序集
key
中,所有score
值介于max
和min
之间(包括min
和max
)的成员,有序成员是按递减(从大到小)排序。其他同zrangebyscore
语法: zrevrangebyscore key max min [WITHSCORES][LIMIT offset count]
返回值:从大到小排序的指定区间的集合数据
zcount
返回有序集
key
中,score
值介于min
和max
之间(包括min
和max
)的成员数量。
语法: zcount key min max
返回值:从大到小排序的指定区间的集合数据数量
适用场景:微博点赞数排序,查看最新注册的n个用户等。
更多命令
更多的命令还是需要去查询官方文档。这里给出官网地址:redis官网
笔记小结
这一篇文章主要介绍了 redis
的 5 种数据类型,以及常用的操作命令。学到这里,只是完成了 redis
的入门学习,下一节会介绍 redis
的高级使用,包括事务、持久化、主从复制、哨兵机制、安全设置等。
学习渠道
因为朋友的推荐,在蛙课网进行了能力提升学习,课程讲解很通透细致,零基础也是没有问题的。要非常感谢朋友的帮助,也要感谢蛙课网提供的精心录制的视频!在这里也算是以私人的方式做一下宣传,也算是尽自己的绵薄之力做的一点小小的回馈吧。