redis是键值型数据库
启动redis服务端 redis-server
启动redis客户端 redis-cli
使用redis有哪些好处
- 速度快,因为数据在内存中,类似于hashMap, hashMap的优势是查找和操作的时间复杂度都是O(1)
- 支持多种数据类型
- 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
- 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后自动删除。
基础数据结构:
String 字符串
list 队列,栈
set 集合,元素唯一
hash 哈希表
zset 跳表结构,属于有序的set集合
String
-
数据结构:SDS 简单可变数组,
-
扩容机制:容量满了会自动扩容,在容量小于1M时,每次翻倍,超过1M每次只增加1M,最多512M
-
语法:set key value 存储value为字符串类型的数据
get key根据key获得字符串类型的数据
mset 一次存储多个键值对
mget 一次获取多个值
expire key 设置超时时间(秒)
ttl 查看某个key剩余的超时时间
set[ex][nx] ex是为了设置过期时间
nx含义是不存在key时,set操作才会成功,
如果key有了,set操作会返回nil(不会覆盖原key)
incr:针对value是数字时,每次自增1
incrby:针对value是数字时,每次增n
应用场景:用于实现redis的分布式锁
list
- 数据结构:ziplist–当list中数据量很少时,数据连续存储,数组,访问效率高
quickList–当list中数据量多时,是一个双向链表,空间利用率高 - 语法:lpush 从左侧向集合添加元素
rpop 从右侧集合弹出元素
rpush 从右侧添加元素
lpop 从左侧弹出元素
lpush + rpop 行为上是一个队列(先进先出FIFO)
rpush + lpop
lpush + lpop 行为上是一个栈(先进后出)
rpush + rpop
llen 查看集合长度
ltrim 对列表进行截取,格式为key start(起始下标) stop(结束下标)
lindex 按下标获取元素,效率较低,格式 key index(元素下标)
lrange key start(起始下标) stop(结束下标) 其中-1表示到列表的最后 - 应用场景:抢购,消息队列
hash
- 数据结构:hash表(数组+链表)
- 扩容机制:渐进式扩容,扩容过程中会查询新旧两个hash表,不会影响客户的使用,
扩容结束才用新的hash表替换掉旧的hash表。 - 语法:hset格式 hset key子属性 属性值
hget格式 hget key子属性
hgetall
hlen 查看hash表中有几组属性
hincrby
对比字符串 hash 结构可以把一些相关的子属性(key)集中在一起,统一管理
可以对其中属性进行独立管理,存储消耗上要高于字符串
set(唯一)
- 数据结构:hash表(数组+链表)只是仅用了其中key,来保证元素的唯一
- 语法:
sadd格式:sadd key元素 添加元素
smembers格式:smembers key 查看所有元素
sismember格式:sismember key待测试的元素,判断元素是否包含在集合中,
包含返回1,不包含返回0。
scard:获取集合大小
zset(唯一并有序)
- 数据结构:跳跃表(多层的链表结构,减少比较次数)
- 语法:
zadd格式:zadd key 得分元素注意默认得分低的排在前面
zrange格式:zrange key start(起始下标) stop(结束下标)
zrevrange格式:zrevrange key start(起始下标) stop(结束下标)
zcard:查看大小
zscore:查看某个元素的得分,格式:zscore key 元素 返回得分
zrank:查看某个元素的排名,排名从0开始
zrangebyscore-inf :给一个分数范围,根据此范围定位符的元素
zrem:删除集合中的元素