阅读 212

Redis 的数据结构

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:存储键值对

比较常用的是 Stringhash

string

string 类型的数据在redis中是以二进制的方式存储的,这就避免了编码格式的问题,存入的是什么编码格式的字符串,读取的就是什么编码格式的字符串

  • 以二进制形式存储,存入和获取的数据一致
  • value 最多可以容纳的数据长度是 512M

string 常用命令

  • 赋值set 键 值
  • 不存在才赋值:setnx 键 值 存在不赋值,返回0, 不存在才赋值,返回1
  • 取值get 键 获取键的值
  • 修改getset 键 新值 将键的值改为新值
  • 删除del 键 删除键的值
  • 数值加1inc 键 如果 键 不存在,则创建 键 并设置值为0再加1,如果存在就直接加1,如果存在但值不能转成整型,就会报错
  • 数值减1decr 键,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

  • 存储差集(补集)到新setsdiffstore 新集合 集合1 集合2 将集合1的差集(补集) 存入新集合

  • 交集运算sinter 键a 键b 结果是两个set 中都有的元素

  • 存储交集到新setsinterstore 新集合 集合1 集合2 将集合1 和集合2的交集存入新集合

  • 并集运算sunion 键a 键b 会将两个 set 中的元素合并在一起,重复的元素只会保留一份

  • 存储并集到新setsunionstore 新集合 集合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
关注下面的标签,发现更多相似文章
评论