redis 是 key-value 类型的数据库,key 通常是一个字符串,但它的value对应5种数据类型
key 的定义注意事项
它的 key 在定义时,需要注意以下事项
- 不要超过 1024 个字节,过长除了会消耗内存,还会降低查找效率
- 有统一的命名规范
key 常用的命令
- 查询所有的键:
keys *
- 查询所有以某个字符串开头的的键:
keys 字符串?
- 删除键:
del 键1 键2
- 查看键是否存在:
exists 键
存在返回1 不存在返回0 - 对键重命名:
rename 键 新键名
- 设置过期时间:
expire 键 秒
- 查看键的剩余过期时间:
ttl 键
返回剩余的秒 如果键没有设置超时时间返回-1 - 查看键对应的值的类型:
type 键
sorted-set 类型的值会返回 zset
常用的数据类型
redis 常用的数据类型有五种
- String:存储字符串、整数、浮点数
- list: 存储字符串、整数、浮点数列表
- set:存储字符串、整数、浮点数集合
- sort set:存储有序字符串、整数、浮点数集合
- hash:存储键值对
string
string 类型的数据在redis中是以二进制的方式存储的,这就避免了编码格式的问题,存入的是什么编码格式的字符串,读取的就是什么编码格式的字符串
- 以二进制形式存储,存入和获取的数据一致
- value 最多可以容纳的数据长度是 512M
string 常用命令
- 赋值:
set 键 值
- 不存在才赋值:
setnx 键 值
存在不赋值,返回0, 不存在才赋值,返回1 - 取值:
get 键
获取键的值 - 修改:
getset 键 新值
将键的值改为新值 - 删除:
del 键
删除键的值 - 数值加1:
inc 键
如果 键 不存在,则创建 键 并设置值为0再加1,如果存在就直接加1,如果存在但值不能转成整型,就会报错 - 数值减1:
decr 键
,decr 正好 与 inc 命令相反,它是减1 - 数值加:
incby 键 数值
,与inc 键
相同,不同的地方在于他指定了要加的数值 - 数值减:
decrby 键 数值
,与inc 键
相同,不同的地方在于他指定了要减的数值 - 拼接:
append 键 值
在指定键后面拼接值,如果键不存在,创建 键 并初始化化为 值 - 判断键是否存在:
exists 键
, 存在返回1,不存在返回0
hash
hash 类型可以看做是 string key 和 string value 的 map 容器
一个hesh可以存储 4294967295 个键值对
hash 常用命令
- 赋值:
hset 键 hash的键 hash的值
存入一对 hash ,同一个 键 可以存入多对hash - 批量赋值:
hmset 键 hash的键1 hash的值1 hash的键2 hash的值2
在一个键中同时存入多对hash - 取值:
hget 键 hash的键
取出 hash键对应的值 - 批量取值:
hmget 键 hash的键1 hash的键2
取出 hash键1、hash键2对应的值 - 获取全部的值:
hgetall 键
获取 键 中所有 hash键对应的值 - 删除:
hdel 键 hash的键1 hash的键2
删除hash的键1、hash的键2对应的键值对 - 数值加::
hincby 键 hash的键 数值
,给 hash的键对应的值 加上指定的数值 - 判断某个 hash键 是否存在:
hexists 键 hash的键
, 存在返回1,不存在返回0 - 获取 hash对 的数量:
hlen 键
获取该键中 hash 对的数量 - 获取所有的 hash键:
hkeys
获取该键中 hash键的列表 - 获取所有的 hash值:
hvals
获取该键中 hash值的列表
list
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
如果列表中的所以元素被删除,那么列表本身也会被删除
list 常用命令
- 左端添加:
lpush 键 值1 值2 值3
在list左边添加值 如果键不存在则创建 插入后的顺序为值3 值2 值1 - 右端添加:
rpush 键 值1 值2 值3
在list右边添加值 如果键不存在则创建 插入后的顺序为值1 值2 值3 - 查看:
lrange 键 开始下标 结束下标
包括开始不包括结束 下标可以从0开始 也可以从-1开始,-1就表示倒数第一个 - 左端弹出:
lpop 键
删除掉list左边第一个元素 - 右端弹出:
rpop 键
删除掉list右边第一个元素 - 获取列表中元素的个数:
llen 键
如果键不存在,返回0 - list存在时,左端添加:
lpushx 键 值
键存在则添加,键不存在不添加 - list存在时,右端添加:
rpushx 键 值
键存在则添加,键不存在不添加 - 批量删除某个元素:
lrem 键 个数 元素
个数为正数则从左往右删除 个数为负数则从右往左删除 个数为0则删除所有 举例 lrem nameList 2 tom 表示从左往右删除 nameList 中2个 tom 元素。lrem nameList -3 joy 表示从右往左删除 nameList 中3个 joy 元素。lrem nameList 0 ros 删除nameList中所以的 ros - 修改某一下标的值:
lset 键 下标的值
下标可以从0开始 也可以从-1开始,-1就表示倒数第一个 如果下标存在则覆盖原有值 如果下标不存在则报错 - 在某个元素之前插入元素 :
linsert 键 before 元素 要插入的元素
从左往右匹配第一个找到的元素 插入之后,插入点后面的元素下标+1 - 在某个元素之后插入元素 :
linsert 键 after 元素 要插入的元素
从左往右匹配第一个找到的元素 插入之后,插入点后面的元素下标+1 - 将链表a的尾部元素弹出插入到链表b的头部:
rpoplpush 键a 键b
完成之后 链表a会少一个元素 链表b会多一个元素
set
set 可以看成是没有排序的字符集合,和list不同的是 set 中不允许出现重复元素
一个set 最多可以包含 232 - 1 个元素
set 常用命令
- 添加元素:
sadd 键 元素1 元素2 元素3
重复的元素只会保留一份 - 删除元素:
srem 键 元素1 元素2
- 查看元素:
smembers 键
它会列出所有的元素 - 查看set中是否包含某元素:
sismember 键 元素
返回1表示存在 0表示不存在 - 获取set中元素的数量:
scard 键
- 随机获取一个元素:
srandmember 键
集合运算
假设 set1 中有 a、b、c, set2 中有 1、2、c
- 差集(补集)运算:
sdiff 键a 键b
谁在前面,求谁的差集(补集)
set1的差集(补集)为红色部分中的 1、2,命令写作 sdiff set1 set2
set2的差集(补集)为红色部分中的 a、b,命令写作 sdiff set2 set1
-
存储差集(补集)到新set:
sdiffstore 新集合 集合1 集合2
将集合1的差集(补集) 存入新集合 -
交集运算:
sinter 键a 键b
结果是两个set 中都有的元素 -
存储交集到新set:
sinterstore 新集合 集合1 集合2
将集合1 和集合2的交集存入新集合 -
并集运算:
sunion 键a 键b
会将两个 set 中的元素合并在一起,重复的元素只会保留一份 -
存储并集到新set:
sunionstore 新集合 集合1 集合2
将集合1 和集合2的并集存入新集合
sorted-set
有序的set集合,除了顺序其他都和set一致,比如不允许出现重复元素
sorted-set 中的每一个成员都有一个对应的分数,sorted-set 通过分数确定成员的顺序
如果两个元素的分数一样,那么按照元素的字典顺序排序
常用的命令
- 添加元素:
zadd 键 分数1 值1 分数2 值2
例如 zadd sortName 90 张三 93 王五 - 更新分数:
zadd 键 新分数 值1
例如 zadd sortName 100 张三 - 获取元素的分数:
zscore 键 值
- 获取元素数量:
zcard 键
- 删除某个元素:
zrem 键 值1 值2
- 查看元素:
zrange 键 序号1 序号2
序号可以从0开始 也可以从-1开始,-1就表示倒数第一个 比如 zrange sortName 0 -1 表示查看 sortName 的第一个元素到最后一个元素 - 查看元素和对应的分数:
zrange 键 序号1 序号2 withscorse
按分数从小到大排序 - 查看元素和对应的分数:
zrevrange 键 序号1 序号2 withscorse
按分数从大到小排序 - 按照排名的范围删除元素:
zremrangebyrank 键 序号1 序号2
包含开始不包含结束 - 按照分数的范围删除元素:
zremrangebyscore 键 分数1 分数2
包含开始分数不包含结束分数 - 获取某段分数内的元素:
zrangebyscore 键 分数1 分数2 withscorse limit 数字1 数字2
包含开始分数不包含结束分数, 结果按分数从小到大排序, withscorse是可选参数,加上之后会显示分数 limit也是可选参数,例如 limit 0 2 表示只取结果集的前两位 - 给元素加分数:
zincrby 键 要加的分数 值
- 获取某段分数中元素的个数:
zcount 键 分数1 分数2