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 数量
经验分享 程序员 微信小程序 职场和发展