做后端开发的同学,对redis应该都不陌生,经常被用来做缓存使用,也会被用来做分布式锁。不过这几年对redis的理解还只是在使用阶段,趁着快过年,自己时间比较多,从头开始再学习一边redis,也在这里写文章记录下来。
目前redis的版本已经到6.0,不过基本数据类型还是保持5种:string、hash、list、set、zset,我们一个个来看下示例和常用的一些相关命令。
string
字符串应该是目前最常用的数据类型了,理解上也跟其他的一些编程语言或者工具都是一致的,最常用的命令就是set和get。
顺便学习几个其他常用的命令
getset
getset key value
getset和set的区别是,getset会返回key的旧值,因为redis命令都是原子操作,利用getset命令也可以用来做分布式锁,这个我们后面再详细介绍
mget
mget key1 [key2...]
m前缀在redis命令中一般表示批量的意思,在后面几个数据类型中还会出现m开头的命令
setnx
setnx key value
使用redis来做过分布式锁的同学对这个命令应该比较熟悉了,含义是key不存在时,才能set成功,否则就会失败
hash
一看到这个类型,可能就会联想到hashmap了,hash就是存了一个键值对
这个就比较使用用来存储对象了,一个对象有多个属性,可以用这个类型来存储。
例如上图,对象key是user,里面有2个属性,分别是age和name。
hmset
图中使用了hmget把2个属性一次取出来,也可以使用hmset一次存储多个属性
hmset user name podongfeng age 28
hvals
hvals key
这个命令可以把一个hash对象的所有属性值都获取出来,也非常常用
list
列表就是字符串列表,常用示例
llen
llen key
获取列表的长度
lrange key start stop
lrange key start stop
获取列表指定范围内的元素
set
和其他语言的集合一样,在redis中,集合是不能有重复元素的;实现的方式是哈希表,所以集合的增删查也都是O(1)时间就可以完成。
sadd
sadd key member1 [member2]
向集合中添加元素
scard
scard key
获取集合中成员的数量
smembers key
smembers key
返回集合中的所有成员
zset
zset可以理解成在set的基础上,每个成员都会有一个double类型的分数,用来做从小到大的排序。其他的特性和set都是类型的,常用示例
zadd
zadd key score1 member1 [score2 member2]
向有序集合添加一个或多个成员
zrangebyscore key min max
通过分数返回有序集合指定区间内的成员