1 - 基本操作
安装
- 下载:打开redis官方网站,推荐下载稳定版本(stable)
- 解压
1 | tar zxvf redis - 3.2 . 5.tar .gz |
- 复制:推荐放到usr/local目录下
1 2 3 | sudo mv - r redis - 3.2 . 3 / * / usr / local / redis / 进入redis目录 cd / usr / local / redis / |
- 生成
1 | sudo make |
- 测试
sudo make test
这段运行时间会较长
- 安装:将redis的命令安装到/usr/bin/目录
1 | sudo make install |
运行
- 启动服务器:在桌面目录
1 2 | redis - server 按ctrl + c停止 |
- 启动客户端:在新终端中运行如下代码
1 | redis - cli |
- 运行命令
1 2 | ping set 'a' '123' |
- 当添加键值后,发现在当前运行的目录下,创建了一个文件:dump.rdb,这个文件用于将数据持久化存储
基本配置
- 在源文件/usr/local/redis目录下,文件redis.conf为配置文件
- 绑定地址:如果需要远程访问,可将此行注释
1 | bind 127.0 . 0.1 |
- 端口,默认为6379
1 | port 6379 |
是否以守护进程运行
- 如果以守护进程运行,则不会在命令行阻塞,类似于服务
- 如果以非守护进程运行,则当前终端被阻塞,无法使用
- 推荐改为yes,以守护进程运行
1 | daemonize no|yes |
- 数据文件
1 | dbfilename dump.rdb |
- 数据文件存储路径
1 2 | dir 的默认值为. / ,表示当前目录 推荐改为: dir / var / lib / redis |
使用配置文件方式启动
- 直接运行redis-server会直接运行,阻塞当前终端
- 一般配置文件都放在/etc/目录下
1 | sudo cp / usr / local / redis / redis.conf / etc / redis / |
- 推荐指定配置文件启动
1 | sudo redis - server / etc / redis / redis.conf |
- 停止redis服务
1 2 | ps ajx|grep redis sudo kill - 9 redis的进程 id |
数据操作
-
redis是key-value的数据,所以每个数据都是一个键值对
-
键的类型是字符串
-
值的类型分为五种:
- 字符串string
- 哈希hash
- 列表list
- 集合set
- 有序集合zset
-
数据操作的全部命令,可以查看中文网站
-
接下来逐个介绍操作各类型的命令
string
- string是redis最基本的类型
- 最大能存储512MB数据
- string类型是二进制安全的,即可以为任何数据,比如数字、图片、序列化对象等
命令
设置
- 设置键值
set key value
- 设置键值及过期时间,以秒为单位
1 | SETEX key seconds value |
- 设置多个键值
1 | MSET key value [key value ...] |
获取
- 根据键获取值,如果不存在此键则返回nil
1 | GET key |
- 根据多个键获取多个值
1 | MGET key [key ...] |
运算
- 要求:值是数字
- 将key对应的value加1
1 | INCR key |
- 将key对应的value加整数
1 | INCRBY key increment |
- 将key对应的value减1
1 | DECR key |
- 将key对应的value减整数
1 | DECRBY key decrement |
其它
- 追加值
APPEND key value
- 获取值长度
1 | STRLEN key |
键的命令
- 查找键,参数支持正则
1 | KEYS pattern |
- 判断键是否存在,如果存在返回1,不存在返回0
1 | EXISTS key [key ...] |
- 查看键对应的value的类型
1 | TYPE key |
- 删除键及对应的值
DEL key [key ...]
- 设置过期时间,以秒为单位
- 创建时没有设置过期时间则一直存在,直到使用使用DEL移除
1 | EXPIRE key seconds |
- 查看有效时间,以秒为单位
TTL key
hash
- hash用于存储对象,对象的格式为键值对
命令
设置
- 设置单个属性
HSET key field value
- 设置多个属性
1 | HMSET key field value [field value ...] |
获取
- 获取一个属性的值
HGET key field
- 获取多个属性的值
1 | HMGET key field [field ...] |
- 获取所有属性和值
1 | HGETALL key |
- 获取所有的属性
1 | HKEYS key |
- 返回包含属性的个数
1 | HLEN key |
- 获取所有值
1 | HVALS key |
其它
- 判断属性是否存在
1 | HEXISTS key field |
- 删除属性及值
1 | HDEL key field [field ...] |
- 返回值的字符串长度
HSTRLEN key field
list
- 列表的元素类型为string
- 按照插入顺序排序
- 在列表的头部或者尾部添加元素
命令
设置
- 在头部插入数据
LPUSH key value [value ...]
- 在尾部插入数据
RPUSH key value [value ...]
- 在一个元素的前|后插入新元素
1 | LINSERT key BEFORE|AFTER pivot value |
-
设置指定索引的元素值
-
索引是基于0的下标
-
索引可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
1 | LSET key index value |
获取
- 移除并且返回 key 对应的 list 的第一个元素
LPOP key
- 移除并返回存于 key 的 list 的最后一个元素
1 | RPOP key |
-
返回存储在 key 的列表里指定范围内的元素
-
start 和 end 偏移量都是基于0的下标
-
偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
1 | LRANGE key start stop |
其它
-
裁剪列表,改为原集合的一个子集
-
start 和 end 偏移量都是基于0的下标
-
偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
1 | LTRIM key start stop |
- 返回存储在 key 里的list的长度
1 | LLEN key |
- 返回列表里索引对应的元素
1 | LINDEX key index |
set
- 无序集合
- 元素为string类型
- 元素具有唯一性,不重复
命令
设置
- 添加元素
1 | SADD key member [member ...] |
获取
- 返回key集合所有的元素
1 | SMEMBERS key |
- 返回集合元素个数
1 | SCARD key |
其它
- 求多个集合的交集
1 | SINTER key [key ...] |
- 求某集合与其它集合的差集
1 | SDIFF key [key ...] |
- 求多个集合的合集
1 | SUNION key [key ...] |
- 判断元素是否在集合中
1 | SISMEMBER key member |
zset
- sorted set,有序集合
- 元素为string类型
- 元素具有唯一性,不重复
- 每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序
- 元素的score可以相同
命令
设置
- 添加
1 | ZADD key score member [score member ...] |
获取
- 返回指定范围内的元素
1 | ZRANGE key start stop |
- 返回元素个数
1 | ZCARD key |
- 返回有序集key中,score值在min和max之间的成员
1 | ZCOUNT key min max |
- 返回有序集key中,成员member的score值
1 | ZSCORE key member |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理