Redis基础操作详解
2235字约7分钟
数据库Redis
2024-12-16
Redis是一个开源的、基于键值对的内存数据结构存储系统,常被用作数据库、缓存和消息中间件。本文将介绍Redis的基础操作命令。
Redis简介
Redis(Remote Dictionary Server)是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。它支持多种数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。
Redis的特点
- 高性能:基于内存操作,读写速度非常快
- 丰富的数据类型:支持多种数据结构
- 持久化:支持RDB和AOF两种持久化方式
- 主从复制:支持主从复制,提高数据安全性
- 事务支持:支持简单的事务操作
- 发布/订阅:支持消息的发布与订阅
基本数据类型
Redis支持以下几种基本数据类型:
| 数据类型 | 描述 | 使用场景 |
|---|---|---|
| string(字符串) | 最基本的数据类型,可以存储字符串、整数或浮点数 | 缓存、计数器、分布式锁 |
| hash(哈希) | 键值对集合,类似于编程语言中的map | 存储对象 |
| list(列表) | 有序的字符串列表 | 消息队列、最新列表 |
| set(集合) | 无序且不重复的字符串集合 | 标签、好友关系 |
| zset(有序集合) | 类似于set,但每个元素都关联一个分数 | 排行榜、带权重的消息队列 |
键(key)操作
键操作是Redis中最基本的操作,所有数据类型都基于键进行操作。
EXISTS - 检查键是否存在
# 检查单个键是否存在
EXISTS key
# 检查多个键是否存在
EXISTS key1 key2 key3DEL - 删除键
# 删除单个键
DEL key
# 删除多个键
DEL key1 key2 key3TYPE - 获取键的数据类型
# 返回键的数据类型
TYPE keyKEYS - 查找所有匹配给定模式的键
# 查找所有键
KEYS *
# 查找以"user"开头的键
KEYS user*
# 查找以"name"结尾的键
KEYS *nameEXPIRE - 设置键的过期时间
# 设置键在10秒后过期
EXPIRE key 10
# 设置键在指定时间戳过期
EXPIREAT key timestampTTL - 获取键的剩余生存时间
# 获取键的剩余生存时间(秒)
TTL key
# 获取键的剩余生存时间(毫秒)
PTTL keyRENAME - 重命名键
# 重命名键
RENAME oldkey newkey
# 当新键不存在时重命名
RENAMENX oldkey newkey字符串(string)操作
字符串是Redis最基本的数据类型,可以存储字符串、整数或浮点数。
SET - 设置键值
# 设置键值
SET key value
# 设置键值并设置过期时间(秒)
SETEX key seconds value
# 设置键值并设置过期时间(毫秒)
PSETEX key milliseconds value
# 只有键不存在时才设置
SETNX key valueGET - 获取键值
# 获取键的值
GET keyINCR/DECR - 自增/自减
# 将键的值增加1
INCR key
# 将键的值增加指定数值
INCRBY key increment
# 将键的值增加指定浮点数
INCRBYFLOAT key increment
# 将键的值减少1
DECR key
# 将键的值减少指定数值
DECRBY key decrementMSET/MGET - 批量操作
# 批量设置键值
MSET key1 value1 key2 value2
# 批量获取键值
MGET key1 key2APPEND - 追加字符串
# 在键值后追加字符串
APPEND key valueSTRLEN - 获取字符串长度
# 获取键值的长度
STRLEN key哈希(hash)操作
哈希是一个键值对集合,适合存储对象。
HSET - 设置哈希字段值
# 设置哈希字段的值
HSET key field value
# 设置多个哈希字段的值
HMSET key field1 value1 field2 value2HGET - 获取哈希字段值
# 获取哈希字段的值
HGET key field
# 获取哈希中多个字段的值
HMGET key field1 field2
# 获取哈希中所有字段和值
HGETALL keyHDEL - 删除哈希字段
# 删除一个或多个哈希字段
HDEL key field1 field2HEXISTS - 检查哈希字段是否存在
# 检查哈希字段是否存在
HEXISTS key fieldHLEN - 获取哈希字段数量
# 获取哈希中字段的数量
HLEN keyHKEYS/HVALS - 获取哈希的所有字段名或值
# 获取哈希中所有字段名
HKEYS key
# 获取哈希中所有值
HVALS key列表(list)操作
列表是简单的字符串列表,按照插入顺序排序。
LPUSH/RPUSH - 向列表插入元素
# 将一个或多个值插入到列表头部
LPUSH key value1 value2
# 将一个或多个值插入到列表尾部
RPUSH key value1 value2LPOP/RPOP - 从列表弹出元素
# 移除并返回列表的第一个元素
LPOP key
# 移除并返回列表的最后一个元素
RPOP keyLRANGE - 获取列表指定范围的元素
# 获取列表中指定范围的元素
LRANGE key start stop
# 获取列表中的所有元素
LRANGE key 0 -1LLEN - 获取列表长度
# 获取列表的长度
LLEN keyLINDEX - 通过索引获取列表元素
# 通过索引获取列表中的元素
LINDEX key indexLREM - 移除列表元素
# 移除列表中与value相等的元素
LREM key count valueLSET - 设置列表指定位置的值
# 设置列表指定索引位置的值
LSET key index value集合(set)操作
集合是字符串类型的无序集合,不允许重复成员。
SADD - 向集合添加元素
# 向集合添加一个或多个元素
SADD key member1 member2SMEMBERS - 获取集合所有成员
# 获取集合中的所有成员
SMEMBERS keySREM - 移除集合元素
# 移除集合中的一个或多个元素
SREM key member1 member2SISMEMBER - 检查元素是否在集合中
# 检查元素是否是集合的成员
SISMEMBER key memberSCARD - 获取集合元素数量
# 获取集合的元素数量
SCARD keySPOP - 随机移除并返回集合元素
# 随机移除并返回集合中的一个元素
SPOP keySRANDMEMBER - 随机返回集合元素
# 随机返回集合中的一个或多个元素
SRANDMEMBER key [count]SMOVE - 将元素从一个集合移动到另一个集合
# 将元素从source集合移动到destination集合
SMOVE source destination member集合运算
# 返回多个集合的交集
SINTER key1 key2
# 返回多个集合的并集
SUNION key1 key2
# 返回多个集合的差集
SDIFF key1 key2有序集合(sorted set)操作
有序集合是集合的一个升级版,每个元素都关联一个分数,通过分数进行排序。
ZADD - 向有序集合添加元素
# 向有序集合添加一个或多个元素及其分数
ZADD key score1 member1 score2 member2ZRANGE - 获取有序集合指定范围的元素
# 获取有序集合指定范围的元素(按分数从小到大)
ZRANGE key start stop [WITHSCORES]
# 获取有序集合指定范围的元素(按分数从大到小)
ZREVRANGE key start stop [WITHSCORES]ZREM - 移除有序集合元素
# 移除有序集合中的一个或多个元素
ZREM key member1 member2ZSCORE - 获取元素的分数
# 获取有序集合中元素的分数
ZSCORE key memberZCARD - 获取有序集合元素数量
# 获取有序集合的元素数量
ZCARD keyZRANK - 获取元素的排名
# 获取元素在有序集合中的排名(按分数从小到大)
ZRANK key member
# 获取元素在有序集合中的排名(按分数从大到小)
ZREVRANK key memberZRANGEBYSCORE - 通过分数范围获取元素
# 获取指定分数范围内的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]ZINCRBY - 增加元素的分数
# 增加有序集合中元素的分数
ZINCRBY key increment member通用命令
PING - 测试连接
# 测试与服务器的连接
PINGECHO - 打印字符串
# 打印给定的字符串
ECHO messageSELECT - 切换数据库
# 切换到指定的数据库(0-15)
SELECT dbindexFLUSHDB - 清空当前数据库
# 删除当前数据库中的所有键
FLUSHDBFLUSHALL - 清空所有数据库
# 删除所有数据库中的所有键
FLUSHALLDBSIZE - 获取键的数量
# 返回当前数据库的键的数量
DBSIZEINFO - 获取服务器信息
# 获取服务器的各种信息和统计数值
INFO [section]实际应用示例
1. 缓存应用
# 设置用户信息缓存,过期时间为3600秒
SETEX user:1001 3600 "{\"name\":\"张三\",\"age\":25}"
# 获取用户信息
GET user:10012. 计数器应用
# 页面访问计数
INCR page:views:home
# 获取访问次数
GET page:views:home3. 分布式锁
# 获取锁,过期时间为30秒
SETNX lock:resource 1
EXPIRE lock:resource 30
# 释放锁
DEL lock:resource4. 消息队列
# 生产者:向队列中添加消息
LPUSH queue:messages "Hello World"
# 消费者:从队列中取出消息
RPOP queue:messages