一、什么是Redis
Redis,全称 Remote Dictionary Server,是一种基于键值对(key-value)的NoSQL数据库。
Redis的特性:
- 速度快
- 基于键值对的数据结构服务器
- 丰富的功能
- 简单稳定
- 客户端语言多
- 持久化:RDB和AOF
- 主从复制
- 高可用和分布式
Redis的使用场景:
- 缓存
- 排行榜系统
- 计数器应用
- 社交网络
- 消息队列系统
Redis高性能的三个因素:
- 纯内存存储
- IO多路复用技术
- 单线程架构
Redis常用全局命令:
//查看所有键
keys *
//键总数
dbsize
//检查键是否存在,存在返回1不存在返回0
exists key
//删除键
del key [key...]
//为某个键设置过期时间(秒)
expire key seconds
//返回键的剩余过期时间(秒)
ttl key
//键的数据结构类型
type key
二、五种常用数据类型
Redis常用的五种数据类型分别是:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)。
(一)字符串:
字符串类型的值可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是最大值不能超过512MB。
使用场景: 缓存、计数、共享session、限速。
常用命令:
//设置值
//ex seconds: 为键设置秒级过期时间
//px millseconds:为键设置毫秒级过期时间
//nx:键必须不存在,才可以设置成功,用于添加
//xx:键必须存在,才可以设置成功,用于更新
set key value [ex seconds] [px milliseconds] [nx|xx]
//获取值
get key
//批量设置值
mset key value [key value...]
//批量获取值
mget key [key...]
//计数
incr key
(二)哈希
哈希类型是指键值本身又是一个键值对结构,形如value={{field1,value1},...{fieldN,valueN}}。哈希类型中的映射关系叫做field-value,注意这里的value是指field对应的值,不是键值对的值。
使用场景:缓存
常用命令:
//设置值,成功会返回1反之返回0
hset key field value
//获取值
hget key field
//删除field,返回结果为成功删除的个数
hdel key field [field...]
//计算field个数
hlen key
//批量设置或获取field-value
hmget key field [field...]
hmget key field value [field value...]
//判断field是否存在,包含返回1不包含返回0
hexist key firld
//获取所有field
hkeys key
//获取所有的value
hvals key
//获取所有的field-value
hgetall key
(三)列表
列表(list)类型是用来存储多个有序的字符串,列表中的每个字符串称为元素,一个列表最多可以存储2的32次方-1个元素。在Redis中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。
使用场景:消息队列、文章列表
命令:
//添加
//从右面插入元素
rpush key value [value...]
//从左边插入元素
lpush key value [value...]
//向某个元素前或者后插入元素
linsert key before|after pivot value
//查找
//获取指定范围内的元素列表(索引下标为0~N-1)
lrange key start end
//获取列表指定索引下标的元素
lindex key index
//获取列表长度
llen key
//删除
//从列表左侧弹出元素
lpop key
//从列表右侧弹出
rpop key
//删除指定元素,从列表中找到等于value的元素进行删除
(count>0从左到右,删除count个元素;count<0从右到左,删除count绝对值个元素;
//count=0删除所有)
lrem key count value
//按照索引范围修剪列表
ltrim key start end
//修改
//修改指定索引下标的元素
lset key index newValue
//阻塞操作
blpop key [key...] timeout
brpop key [key...] timeout
(四)集合
集合(set)类型也是用来保存多个的字符串元素,集合中不允许有重复元素,集合中元素是无序的,不能通过索引下标获取元素。一个集合最多可以存储2的32次方-1个元素,Redis支持集合内的增删改查,同时还支持多个集合取交集、并集。
使用场景:标签
命令:
//集合内操作
//添加元素
sadd key element [element...]
//删除元素
srem key element [element...]
//计算元素个数
scard key
//判断元素是否在集合中
sismember key element
//随机从集合返回指定个数元素(count如果不写默认1)
srandmember key [count]
//从集合随机弹出元素
spop key
//获取所有元素
smembers key
//集合间操作
//求多个集合的交集
sinter key [key...]
//求多个集合的并集
suinon key [key...]
//求多个集合的差集
sdiff key [key...]
//将交集、并集、差集的结果保存
sinterstore destination key [key...]
suionstore destination key [key...]
sdiffstore destination key [key...]
(五)有序集合
有序集合集合内不能有重复元素,但是集合中的元素可以排序。它和列表使用索引下标祖籍为排序依据不同的是,它给每个元素设置一个分数(score)作为排序的依据。
使用场景:排行榜系统
命令:
//集合内
//添加成员
zadd key score member [score member...]
//计算成员个数
zcard key
//计算某个成员的分数
zscore key member
//计算成员的排名,zrank表示从低到高,zrevrank表示从高到低
zrank key member
zrevrank key member
//删除成员
zrem key member [member...]
//增加成员的分数
zincrby key increment member
//返回指定排名范围的成员,加上withscores表示返回成员分数
zrange key start end [withscores]
zrevrange key start end [withscores]
//返回指定分数范围的成员
zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores] [limit offset count]
//返回指定分数范围成员个数
zcount key minm max
//删除指定排名内的升序元素
zremrangebyrank key start end
//删除指定分数范围的成员
zremrangebyscore key min max
//集合间的操作
//destination:交集计算结果保存到这个键
//key [key...]:需要做交集计算的键
//weights weight [weight...]:每个键的权重,交集计算时每个键中的每个member会将自己的分数乘以这个权重,每个键默认权重为1
//aggregate sum|min|max//计算成员交集后,分值可以按照sum(和)、min(最小值)、max(最大值)做汇总,默认是sum
//交集
zinterstore destination numkeys key [key...] [weights weight [weight...]] [aggregate sum|min|max]
//并集
zunionstore destination numkeys key [key...] [weights weight [weight...]] [aggregate sum|min|max]