Redis 基本数据结构和常用命令
redis 概述
高性能键值对数据库, 运行在内存中, 使用单线程
支持的键值数据类型:
-
字符串类型 列表类型 有序集合类型 散列类型 结合类型
应用场景:
-
缓存 任务队列 网站访问统计 数据过期处理 分布式集群架构中的 session 分离
Redis 常见数据结构和相关命令
String 类型相关命令
// 自加 (能转成整型的值, 否则报错) incr num // 如果未存入num, 则自动存入 num -> 1 // 自减 decr num // num -> 0 // 加一个数 incrby num 3 // 加3, num -> 3 // 减 decrby num 2 // num -> 1 // 字符串拼接 append num 100 // num -> 100
Hash 类型相关命令
hash 相当与一个 String key he String value 的 map 容器
// 存入一个 key-value hset myhash username root hset myhash age 20 hget myhash username // -> root // 同时存入多个 hmset myhash2 username root age 20 // 加 hincrby myhash age 2 // 查询 key 是否存在 hexists myhash username // -> 1 // 返回所有键和值 hgetall myhash // 返回所有key hkeys myhash // 返回所有 value hvals myhash // key-value 数量 hlen myhash
list 类型
list 的字符类型集合
// 左端插入数据 (头) lpush mylist 1 2 3 // 右端插入 (尾) rpush mylist a b c // 取出 lpop mylist rpop mylist // 范围查询 lrange mylist 0 5 // 输出索引 0 到 5 的元素 (6个) // 设置某个位置的值 lset mylist 3 y // 第四个设置为 y // 插入, 在第一个元素 a 前插入 aa linsert mylist before a aa linsert mylist after a aa // 从一个 list 取出存到另一个 list rpoplpush mylist mylist2 // 删除, count 可选, // =0, 删除全部; // >0 从左到右删除最多count个和value相等的项, <0 反之 lrem mylist count value // 按照索引范围修剪列表 ltrim key start end // 获取列表指定索引的item lindex key index // 长度 llen mylist // 阻塞弹出, lpop 的阻塞版本, timeout 阻塞超时时间, 0永不阻塞 blpop key timeout brpop key timeout
set 类型
set 类型的字符集合
// 添加元素 sadd myset a b c // 删除元素 srem myset a // 判断是否在集合中 sismember myset a // 查询集合全部值 smembers myset // 获取两个集合的交集 sinter myset myset2 // 获取两个集合的并集 sunion myset myset2 // 获取集合的元素数量 scard myset // 随机获取几个的元素 srandmember myset // 将两个集合的差值存入第三个 sdiffstore myset1 myset2 myset3 // 将两个集合的并集存入第三个 sunion myset1 myset2 myset3
Sorted-Set
sorted-set 成员是有序的 set 每个成员对应一个分数, 成员不同相同, 但分数可以相同 通过成员排序, 从小到大排序
// 添加元素 zadd mysort 70 abc 80 bcd 100 cde // 替换分数 zadd mysort 75 abc // 已存在则替换原分数 // 统计数量 zcard mysort // 获取分数 zscore mysort abc // 删除元素, 可同时删除多个 zrem mysort abc // 查询元素 zrange mysort 0 -1 // 获取 member 元素排名 zrank mysort member // 查询元素及分数 zrange mysort 0 -1 withscores // 从大到小查询 zrevrange mysort 0 -1 // 按 score 范围查询 zrangebyscore mysort 60 100 // 按 score 范围删除 zremrangebyscore mysort 0 40 // 按排名范围删除 zremrangebyrank mysort 0 10 // 增加指定元素的 score zincrby mysort 5 abc
keys 的通用操作
// 存储 key-value set key value // 取值 get key // 取值, 再设值 getset key value1 // 删除 del key // 查看所有键 keys * // 获取数据库大小, key 的数量 dbsize // 查询 key 是否存在 exists key // 重命名 key rename key nawName // 获取 key 对应 value 的类型 type key // 设置 key 超时时间, 单位 s expire key 1000 // 查看 key 的剩余时间 ttl key
建议使用 scan 代替 keys 命令, 当数据量较多时, 易卡顿, 影响性能, 例 scan 0 match * count 20, scan 游标位置, match 匹配模式, count 数量