一、redis中的常见数据结构
Redis共有5种常见数据结构,分别字符串(STRING)、列表(LIST)、集合(SET)、散列(HASH)、有序集合(ZSET)。
二、redis中五大基本数据类型介绍
字符串(String)介绍
String 类型是一个 k-v 键值对形式的数据类型,一个 key 对应一个 value。
使用场景:
- 计数器
- 统计多单位的数量(uid:122:follow 10)
- 粉丝数
- 对象缓存存储
- ...
列表(List)介绍
集合中的值 可以 重复
集合(Set)介绍
集合中的值 不能 重复(无序)
哈希(Hash)介绍
key - Map or key - <k,v>,value 是一个 Map
用户信息保存,经常变动的信息,适合对象的存储
有序集合(Zset)介绍
在Set基础上增加了一个值(用于排序的值)
存储班级成绩表,工资表排序,
普通消息 = 1,重要消息 = 2,带权重进行判断
排行榜应用实现
三、String 常见命令及对库的命令
1.Redis 默认有16个数据库(0~15),默认使用第0个
可以使用
select
进行切换
2.查看数据库大小
使用
dbsize
查看数据库大小
3.查看所有的key(当前库)
使用
keys *
4.清除当前数据库
flushdb
5.清空所有数据库
flushall
6.判断key是否存在
exists
key
7.移除key
move
key 1 // 1 表示移动到哪个数据库
del
key // 删除当前数据库的key(可以多个)
8.设置key的过期时间
expire
key 时间 // 单位时间为s
ttl
key // 查看剩余存活时间
9.查看当前key的类型
type
key
10.字符串追加(String)
append
key appendValue
- 如果当前 key 不存在,作用相当于 set key
11.获取字符串长度(String)
strlen
key
12.字符串i++操作(可用于阅读量实现)(String)
incr
key
同理,i --
decr
key
incrby
key 步长
decrby
key 步长
13.字符串片段 Range (String)(Range:范围)
getrange
key [startIndex] [endIndex]
- 对应java里的substring(但是这里会endIndex是一个闭区间)
- 特例,endIndex = -1 时,表示从startIndex 到最后
14.字符串替换 (String)(Range:范围)
setrange
key index replaceString
- 对应java里的replace
- 注意,如果replaceString是一个字符串,那么会替换源字符串中index后replaceString长度的片段,结果如下
15.特殊set设置 (String)
setex(set with expire)
setex
key 时间 value // 设置值,带过期时间
setnx(set if not exist)
setnx
key value // 如果不存在,则设置
16.批量设置、批量获取(原子性操作) (String)
mset
k1 v1 k2 v2 …
mget
k1 k2 …
- 特殊
msetnx
批量设置(要么都成功,要么都失败)(原子性)
17.设置高阶 (String)
getset
key value // 先get再set(如果不存在,先返回nil,在设置值;如果存在,就先返回原值,再设置新值)
18.重命名key
rename
key newName
四、List(列表)常见命令
使用场景:
- 栈(lpush、lpop)
- 队列(lpush、rpop)
- 消息队列
- 阻塞队列
- ....
1.从头部/尾部 插入 数据,以及数据 显示
lpush
key value // 从左边插入一个值
rpush
key value // 从右边插入一个值
lrange
key 0 -1 // 从下标 0 开始,-1 代表遍历完
2.从头部/尾部 移除 数据
lpop
key
rpop
key
3.获取 指定索引的值
lindex
key index
4.获取列表长度
llen
key
5.移除指定的值
lrem
key count(移除的个数) element
6.列表修剪 trim
相当于 Java 中的 substring()
ltrim
key startIndex endIndex
7.也可以使用set
lset
key index value // 将列表中 指定 index 的值替换为对应的 value
- 需要保证key和index都存在,否则报错
8.插入指定的值
linsert
key before|after pivot(那个值后) value
五、Set(集合)
集合中的值不能重复(无序)
1.添加成员到集合中,并查看所有成员
sadd
key member
smembers
key
2.判定成员是否存在
sismember
key member
3.查看集合长度(特别)
scard
key
4.移除指定的成员
srem
key member
5.获取集合中的随机成员
srandmember
key [count]
6.随机移除成员
spop
key [count]
7.移动集合成员到其他集合
smove
source destination member(需要移动的成员)
8.数字集合类:
- 差集
sdiff
key1 ,key2 … - 交集(共同好友)
sinter
key1,key2 … - 并集
sunion
key1 ,key2 …
六、Hash(哈希)
key - Map or key - <k,v>,value 是一个 Map。
应用场景:用户信息保存,经常变动的信息,适合对象的存储
1.简单存储Map和获取Map
hset
key field value
hmset
key field value [k1 v1 [k2 v2 …]] // 批量添加一个 Hash 中的 key 和 value
hget
key field
2.获取所有Map字段及值
hgetall
key
3.删除Map中的字段
hdel
key field
4.查看Map中某字段是否存在
hexists
key field
5.获取所有字段或者所有字段对应的值
hkeys
key // 此处的key是Map名
hvals
key
6.增量i++
hincrby
key field value
7.不存在,就添加成功
hsetnx
key field value // field 在map中不存在就添加这个值,否则不做改变
8.适合存储对象(hmset)
在Set基础上增加了一个值(用于排序的值)
存储班级成绩表,工资表排序,
普通消息 = 1,重要消息 = 2,带权重进行判断
排行榜应用实现
七、Zset(有序集合)
1.添加 和 获取
zadd
key n value
zrange
key startIndex endIndex
2.排序实现(升序和降序)
zrangebyscore
key -inf +inf [withscores] // 升序
zrange
key 0 -1
zrevrangebyscore
key +inf -inf [withscores] // 降序
zrevrange
key 0 -1
zrangebyscore
key -inf 任意值n // 升序 + 显示区间 [-inf,n]
3.移除指定的值
zrem
key value
4.集合的长度
zcard
key
5.指定区间的集合长度
zcount
key startIndex endIndex