作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL
PostgreSQL
Redis(本章节)
Etcd
上个小节介绍了Redis的数据类型,今天这个小节我们就来介绍数据的增改查,其他数据我们介绍的时候都是从库表数据3个方面介绍的,但是Redis比较特殊,虽然有库的概念,但是我们不并需要手工去创建,系统默认给我们16个库(0-15),默认是0库,我们直接向库里面写入数据即可,没有表的概念。

# 设置单个键值
SET name "张三"
# 设置并指定过期时间(秒)
SETEX token 3600 "abc123"
# 仅当键不存在时设置
SETNX counter 1
# 批量设置
MSET key1 "value1" key2 "value2"
# 追加值
APPEND name "先生" # 结果:"张三先生"删(Delete)
# 删除键
DEL name
# 设置过期时间(创建时就过期)
SET key "temp" EX 10
# 设置值并获取旧值
GETSET name "李四" # 返回旧值"张三"改(Update)
# 修改值
SET name "王五"
# 数字增减
INCR counter # 自增1
DECR counter # 自减1
INCRBY counter 5 # 增加5
DECRBY counter 3 # 减少3
# 浮点数增减
INCRBYFLOAT price 10.5
# 设置新值并返回旧值
GETSET counter 0查(Read)
# 获取单个值
GET name
# 批量获取
MGET name age email
# 获取字符串长度
STRLEN name
# 获取子字符串
GETRANGE name 0 1 # 获取前2个字符
# 判断是否存在
EXISTS name
# 获取并设置过期
GETEX name EX 60增(Create)
# 设置单个字段
HSET user:1 name "张三"
# 设置多个字段
HMSET user:1 age 25 email "zhangsan@qq.com"
# 批量设置(HMSET的替代)
HSET user:1 name "张三" age 25
# 仅当字段不存在时设置
HSETNX user:1 name "李四"删(Delete)
# 删除一个或多个字段
HDEL user:1 email phone
# 删除整个哈希键
DEL user:1改(Update)
# 修改字段值
HSET user:1 age 26
# 数字字段增减
HINCRBY user:1 age 1
HINCRBYFLOAT user:1 salary 500.5查(Read)
# 获取单个字段
HGET user:1 name
# 获取多个字段
HMGET user:1 name age email
# 获取所有字段和值
HGETALL user:1
# 获取所有字段名
HKEYS user:1
# 获取所有字段值
HVALS user:1
# 获取字段数量
HLEN user:1
# 判断字段是否存在
HEXISTS user:1 email
# 获取字段值的字符串长度
HSTRLEN user:1 name增(Create)
# 从左侧插入
LPUSH fruits "apple"
LPUSH fruits "banana" "orange"
# 从右侧插入
RPUSH fruits "grape"
# 在指定元素前后插入
LINSERT fruits BEFORE "banana" "mango"
LINSERT fruits AFTER "apple" "peach"
# 设置指定索引的值
LSET fruits 0 "strawberry"删(Delete)
# 从左侧弹出
LPOP fruits
# 从右侧弹出
RPOP fruits
# 根据值删除元素
LREM fruits 2 "apple" # 删除2个"apple"
LREM fruits 0 "apple" # 删除所有"apple"
LREM fruits -2 "apple" # 从尾部删除2个"apple"
# 修剪列表,只保留指定区间
LTRIM fruits 0 2 # 只保留前3个元素
# 删除整个列表
DEL fruits改(Update)
# 修改指定索引的值
LSET fruits 0 "new_value"查(Read)
# 获取指定范围的元素
LRANGE fruits 0 -1 # 获取所有
LRANGE fruits 0 2 # 获取前3个
LRANGE fruits -3 -1 # 获取最后3个
# 获取指定索引的元素
LINDEX fruits 0
# 获取列表长度
LLEN fruits
# 阻塞弹出(用于消息队列)
BLPOP queue 30 # 最多等待30秒
BRPOP queue 30增(Create)
# 添加一个或多个元素
SADD tags "redis" "database"
SADD tags "nosql" "cache"
# 添加已存在元素会忽略
SADD tags "redis" # 无效果删(Delete)
# 删除一个或多个元素
SREM tags "database"
# 随机移除并返回一个元素
SPOP tags
# 随机移除多个元素
SPOP tags 2
# 删除整个集合
DEL tags
改(Update)
# 集合没有直接的修改操作
# 通常用 SREM + SADD 组合实现
SREM tags "old_tag"
SADD tags "new_tag"查(Read)
# 获取所有元素
SMEMBERS tags
# 获取集合大小
SCARD tags
# 判断元素是否存在
SISMEMBER tags "redis"
# 随机获取一个或多个元素(不移除)
SRANDMEMBER tags
SRANDMEMBER tags 3
# 集合运算
SINTER set1 set2 # 交集
SUNION set1 set2 # 并集
SDIFF set1 set2 # 差集(在set1不在set2)
# 将运算结果存储到新集合
SINTERSTORE result set1 set2
SUNIONSTORE result set1 set2
SDIFFSTORE result set1 set2增(Create)
# 添加一个或多个成员
ZADD leaderboard 100 "player1"
ZADD leaderboard 200 "player2" 150 "player3"
# 更新分数
ZADD leaderboard CH 250 "player1" # CH返回修改的成员数
ZADD leaderboard NX 300 "player4" # 仅当不存在时添加
ZADD leaderboard XX 180 "player2" # 仅当存在时更新
ZADD leaderboard INCR 50 "player1" # 增加分数删(Delete)
# 删除一个或多个成员
ZREM leaderboard "player3"
# 按排名范围删除
ZREMRANGEBYRANK leaderboard 0 2 # 删除前3名
# 按分数范围删除
ZREMRANGEBYSCORE leaderboard 0 100 # 删除分数<=100的成员
# 删除整个有序集合
DEL leaderboard改(Update)
# 增加/减少分数
ZINCRBY leaderboard 50 "player1" # 增加50分
ZINCRBY leaderboard -30 "player2" # 减少30分查(Read)
# 按排名查询(升序)
ZRANGE leaderboard 0 2 WITHSCORES # 前3名,带分数
ZRANGE leaderboard 0 -1 # 所有成员,升序
# 按排名查询(降序)
ZREVRANGE leaderboard 0 2 WITHSCORES # 前3名,降序
# 按分数范围查询
ZRANGEBYSCORE leaderboard 100 200 WITHSCORES
ZRANGEBYSCORE leaderboard 100 +inf # 分数>=100
ZRANGEBYSCORE leaderboard -inf 200 # 分数<=200
ZREVRANGEBYSCORE leaderboard 200 100 # 降序
# 获取成员排名
ZRANK leaderboard "player1" # 升序排名(从0开始)
ZREVRANK leaderboard "player1" # 降序排名
# 获取成员分数
ZSCORE leaderboard "player1"
# 获取集合大小
ZCARD leaderboard
# 统计分数范围内的成员数
ZCOUNT leaderboard 100 200
# 获取指定成员的分数
ZSCORE leaderboard "player1"
# 获取分数在指定范围内的成员数
ZCOUNT leaderboard 100 200
# 按字典序查询
ZRANGEBYLEX myset [a [c # 字典序a到c