文章目录
- Redis数据库
- 1 Redis概述
- 1.1 Redis介绍
- 1.2 Redis特点
- 1.3 应用场景
- 1.4 Redis版本
- 1.5 Redis附加功能
- 1.6 Redis安装
- 1.6.1 Rocky Linux操作系统
- 1.6.2 Windows操作系统
- 1.6.3 Mac操作系统
- 2 配置文件详解
- 3 数据类型
- 3.1 字符串String
- 3.1.1 字符串
- 3.1.2 数值
- 3.2 列表List
- 3.3 Hash散列
- 3.4 集合
- 3.5 有序集合sortedset
Redis数据库
1 Redis概述
1.1 Redis介绍
Redis(Remote Dictionary Server)是一个开源的内存数据库,使用C语言编写,可基于内存亦可持久化,提供多种语言的API。它以其高性能、丰富的数据类型以及简单的单线程模型等特点而广受欢迎。
Redis提供了一个高性能的键值(key-value)存储系统,能够支持每秒数十万次的读写操作,因此特别适用于处理高并发请求和需要快速响应的场景,如缓存、会话管理、排行榜等。它支持多种数据结构,包括字符串、列表、哈希表、集合、有序集合等,为开发者提供了灵活的数据操作能力,可以适应各种不同的应用场景。
此外,Redis还支持数据持久化,可以将内存中的数据异步地保存到硬盘上,防止数据在程序重启时丢失。
1.2 Redis特点
- 开源的,使用C编写,基于内存且支持持久化
- 高性能的Key-Value的NoSQL数据库
- 支持数据类型丰富,字符串string,列表list,散列hash,集合set,有序集合sorted set
- 支持多种编程语言(C C++ Python Java PHP … )
Redis数据库的诞生是为了解决磁盘IO带来的性能瓶颈
1.3 应用场景
- 使用Redis来缓存一些经常被用到、或者需要耗费大量资源的内容,通过这些内容放到redis里面,程序可以快速读取这些内容
- 一个网站,如果某个页面经常会被访问到,或者创建页面时消耗的资源比较多,比如需要多次访问数据库、生成时间比较长等,我们可以使用redis将这个页面缓存起来,减轻网站负担,降低网站的延迟,比如说网站首页等
1.4 Redis版本
- 最新版本:6.0
- 历史版本:2.4、2.6、2.8、3.0(里程碑)、3.2、3.4、4.0、5.0(教学环境版本)、6.0
1.5 Redis附加功能
-
数据持久化
将内存中数据保存到磁盘中,保证数据安全,方便进行数据备份和恢复
-
过期键功能
为键设置一个过期时间,让它在指定时间内自动删除
-
主从同步
-
Sentinel哨兵
1.6 Redis安装
1.6.1 Rocky Linux操作系统
-
安装命令
- 第1步:更新系统,执行:
dnf update -y
- 第2步:安装Redis,执行:
dnf -y install redis
- 第1步:更新系统,执行:
-
Redis服务端操作
-
启动数据库服务:
systemctl start redis
-
停止数据库服务:
systemctl stop redis
-
查看数据库状态:
systemctl status redis
-
重启数据库服务:
systemctl restart redis
-
-
Redis客户端连接
redis-cli -h IP地址 -p 端口号 -a 密码
redis-cli -h 127.0.0.1 -p 6379 -a 密码# 如不指定IP地址和端口,默认连接本机的6379端口 redis-cli
1.6.2 Windows操作系统
-
下载安装包
https://github.com/ServiceStack/redis-windows/blob/master/downloads/redis-64.3.0.503.zip
-
将Redis服务添加到本地服务
- 第1步:解压之后进入 redis-server.exe 文件所在的目录;
- 第2步:地址栏输入cmd + 回车,进入到cmd命令行;
- 第3步:执行命令
redis-server --service-install redis.windows.conf --loglevel verbose
- 第4步:右键桌面的计算机 - 管理 - 服务 - 找到Redis并双击 - 点击启动,即可启动Redis服务
- 第5步:打开cmd命令行,输入
redis-cli
命令,即可进入到redis的命令行模式
1.6.3 Mac操作系统
brew install redis
2 配置文件详解
-
配置文件所在路径
/etc/redis.conf
修改配置文件之前首先备份,执行命令:cp -p /etc/redis.conf /etc/redis.conf.bak
-
设置连接密码
# 1.配置文件中对应的配置requirepass 123456 #其中123456为设置的密码# 2.修改完成侯重启Reids服务systemctl restart redis# 3.客户端连接测试redis-cli -h 127.0.0.1 -p 6379 -a 123456127.0.0.1:6379>PING
-
设置允许远程连接
# 1.注释掉配置文件中的本地IP地址绑定bind 127.0.0.1# 2.关闭保护模式(把yes改为no)protected-mode no# 3.重启Redis服务systemctl restart redis
Windows连接Rocky Linux的Redis服务
Linux查看IP地址的命令:ifconfig
# 其中:x.x.x.x 是Rocky Linux的IP地址 redis-cli -h x.x.x.x -a 123456
3 数据类型
全局命令:适用于所有数据类型
命令 | 作用 |
---|---|
SELECT number | 选择所在库(number在db0~db15之间) |
KEYS * | 查看KEY |
TYPE key | 查看KEY数据类型 |
DEL key | 删除KEY |
FULSHDB | 清空当前库 |
FLUSHALL | 清除所有库数据 |
3.1 字符串String
字符串、数值 都会转为字符串来存储
3.1.1 字符串
-
必须掌握
// 1. 设置一个key-value set key value // 2. 获取key的值 get key // 3. key不存在时再进行设置(nx) set key value nx # not exists // 4. 设置过期时间(ex) set key value ex seconds
-
了解即可
// 同时设置多个key-value mset key1 value1 key2 value2 key3 value3 // 同时获取多个key-value mget key1 key2 key3 // 获取长度 strlen key
3.1.2 数值
-
必须掌握
// 整数操作 INCRBY key 步长 DECRBY key 步长 INCR key : +1操作 DECR key : -1操作// 应用场景: 抖音上有人关注你了,是不是可以用INCR呢,如果取消关注了是不是可以用DECR // 浮点数操作: 自动先转为数字类型,然后再进行相加减,不能使用append incrbyfloat key step
3.2 列表List
-
特性
- 元素是字符串类型
- 列表头尾增删快,中间增删慢,增删元素是常态
- 元素可重复
- 最多可包含2^32 -1个元素
-
列表常用命令
# 增 1、从列表头部压入元素LPUSH key value1 value2 2、从列表尾部压入元素RPUSH key value1 value2 3、从列表src尾部弹出1个元素,压入到列表dst的头部RPOPLPUSH src dst 4、在列表指定元素后/前插入元素LINSERT key after|before value newvalue# 查 5、查看列表中元素LRANGE key start stop# 查看列表中所有元素: LRANGE key 0 -1 6、获取列表长度LLEN key# 删 7、从列表头部弹出1个元素LPOP key 8、从列表尾部弹出1个元素RPOP key 9、列表头部,阻塞弹出,列表为空时阻塞BLPOP key timeout 10、列表尾部,阻塞弹出,列表为空时阻塞BRPOP key timeout# 关于BLPOP 和 BRPOP1、如果弹出的列表不存在或者为空,就会阻塞2、超时时间设置为0,就是永久阻塞,直到有数据可以弹出3、如果多个客户端阻塞再同一个列表上,使用First In First Service原则,先到先服务 11、删除指定元素LREM key count valuecount>0:表示从头部开始向表尾搜索,移除与value相等的元素,数量为countcount<0:表示从尾部开始向表头搜索,移除与value相等的元素,数量为countcount=0:移除表中所有与value相等的值 12、保留指定范围内的元素LTRIM key start stopLRTIM mylist1 0 2 # 只保留前3条# 应用场景: 保存微博评论最后500条LTRIM weibo:comments 0 499# 改 13、LSET key index newvalue
-
练习
1、查看所有的键 2、向列表 spider:urls 中以RPUSH放入如下几个元素:01_baidu.com、02_taobao.com、03_sina.com、04_jd.com、05_xxx.com 3、查看列表中所有元素 4、查看列表长度 5、将列表中01_baidu.com 改为 01_tmall.com 6、在列表中04_jd.com之后再加1个元素 02_taobao.com 7、弹出列表中的最后一个元素 8、删除列表中所有的 02_taobao.com 9、剔除列表中的其他元素,只剩前3条
3.3 Hash散列
-
定义
- 由field和关联的value组成的键值对
- field和value是字符串类型
- 一个hash中最多包含2^32-1个键值对
-
优点
- 每创建一个键,它都会为这个键储存一些附加的管理信息(比如这个键的类型,这个键最后一次被访问的时间等)
- 键越多,redis数据库在储存附件管理信息方面耗费内存越多,花在管理数据库键上的CPU也会越多
-
缺点(不适合hash情况)
- 使用过期键功能:键过期功能只能对键进行过期操作,而不能对散列的字段进行过期操作
-
基本命令操作
# 1、设置单个字段 HSET key field value HSETNX key field value # 2、设置多个字段 HMSET key field value field value # 3、返回字段个数 HLEN key # 4、判断字段是否存在(不存在返回0) HEXISTS key field # 5、返回字段值 HGET key field # 6、返回多个字段值 HMGET key field filed # 7、返回所有的键值对 HGETALL key # 8、返回所有字段名 HKEYS key # 9、返回所有值 HVALS key # 10、删除指定字段 HDEL key field # 11、在字段对应值上进行整数增量运算 HINCRBY key filed increment # 12、在字段对应值上进行浮点数增量运算 HINCRBYFLOAT key field increment
-
应用场景:微博好友关注
1、用户ID为key,Field为好友ID,Value为关注时间user:10000 user:606 20190520user:10000 user:605 20190521 2、用户维度统计统计数包括:关注数、粉丝数、喜欢商品数、发帖数用户为key,不同维度为field,value为统计数比如关注了5人HSET user:10000 fans 5HINCRBY user:10000 fans 1
3.4 集合
-
特点
- 无序、去重
- 元素是字符串类型
- 最多包含2^32-1个元素
-
基本命令
# 1、增加一个或者多个元素,自动去重 SADD key member1 member2 # 2、查看集合中所有元素 SMEMBERS key # 3、删除一个或者多个元素,元素不存在自动忽略 SREM key member1 member2 # 4、元素是否存在 SISMEMBER key member # 5、随机返回集合中指定个数的元素,默认为1个 SRANDOMMEMBER key count # 6、返回集合中元素的个数,不会遍历整个集合,只是存储在键当中了 SCARD key # 7、把元素从源集合移动到目标集合 SMOVE source destination member # 8、差集(number1 1 2 3 number2 1 2 4) SDIFF key1 key2 # 9、差集保存到另一个集合中 SDIFFSTORE destination key1 key2 # 10、交集 SINTER key1 key2 SINTERSTORE destination key1 key2 # 11、并集 SUNION key1 key2 SUNIONSTORE destination key1 key2
-
应用场景
案例: 新浪微博的共同关注
需求: 当用户访问另一个用户的时候,会显示出两个用户共同关注过哪些相同的用户
设计: 将每个用户关注的用户放在集合中,求交集即可
实现:
user001 = {'peiqi','qiaozhi','danni'}user002 = {'peiqi','qiaozhi','lingyang'}user001和user002的共同关注为:SINTER user001 user002 // 结果为: {'peiqi','qiaozhi'}
3.5 有序集合sortedset
-
特点
- 有序、去重
- 元素是字符串类型
- 每个元素都关联着一个浮点数分值(score),并按照分值从小到大的顺序排列集合中的元素(分值可以相同)
- 最多包含2^32-1元素
-
示例
一个保存了水果价格的有序集合
分值 | 2.0 | 4.0 | 6.0 | 8.0 | 10.0 |
---|---|---|---|---|---|
元素 | 西瓜 | 葡萄 | 芒果 | 香蕉 | 苹果 |
一个保存了员工薪水的有序集合
分值 | 6000 | 8000 | 10000 | 12000 | |
---|---|---|---|---|---|
元素 | lucy | tom | jim | jack |
一个保存了正在阅读某些技术书的人数
分值 | 300 | 400 | 555 | 666 | 777 |
---|---|---|---|---|---|
元素 | 核心编程 | 阿凡提 | 本拉登 | 阿姆斯特朗 | 比尔盖茨 |
-
常用命令
# 在有序集合中添加一个成员 zadd key score member # 查看指定区间元素(升序) zrange key start stop [withscores] # 查看指定区间元素(降序) ZREVRANGE key start stop [withscores] # 删除成员 zrem key member # 增加或者减少分值 zincrby key increment member # 返回元素排名 zrank key member # 返回元素逆序排名 zrevrank key member # 返回集合中元素个数 zcard key # 并集 zunionstore destination numkeys key [weights 权重值] [AGGREGATE SUM|MIN|MAX] # 交集:和并集类似,只取相同的元素 ZINTERSTORE destination numkeys key1 key2 WEIGHTS weight AGGREGATE SUM|MIN|MAX