Redis数据库基础操作

1Redis 安装
1.1Rocky Linux 操作系统
安装命令
1 步:更新系统,执行: dnf update - y
2 步:安装 Redis ,执行: dnf - y install redis
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.2Windows 操作系统
下载安装包
https://github.com/ServiceStack/redis-windows/blob/master/downloads/redis-64.3.0.503.zip
Redis 服务添加到本地服务
1 步:解压之后进入 redis-server.exe 文件所在的目录;
redis-cli -h 127 .0.0.1 -p 6379 -a 密码
# 如不指定 IP 地址和端口,默认连接本机的 6379 端口
redis-cli 2 步:地址栏输入 cmd + 回车,进入到 cmd 命令行;
3 步:执行命令 redis - server -- service - install redis.windows.conf -- loglevel
verbose
4 步:右键桌面的计算机 - 管理 - 服务 - 找到 Redis 并双击 - 点击启动,即可启动 Redis 服务
5 步:打开 cmd 命令行,输入 redis - cli 命令,即可进入到 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 123456
127.0.0.1:6379>PING
设置允许远程连接
# 1.注释掉配置文件中的本地IP地址绑定
bind 127.0.0.1 ::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
数据类型
全局命令:适用于所有数据类型
     命令                  作用
SELECT number    选择所在库(number在db0~db15之间)
KEYS *           查看KEY
TYPE key         查看KEY数据类型
DEL key          删除KEY
FULSHDB          清空当前库
FLUSHALL         清除所有库数据
字符串 String
字符串、数值 都会转为字符串来存储
字符串
// 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
数值
// 整数操作
INCRBY key 步长
DECRBY key 步长
INCR key : +1操作
DECR key : -1操作
// 应用场景: 抖音上有人关注你了,是不是可以用INCR呢,如果取消关注了是不是可以用DECR
// 浮点数操作: 自动先转为数字类型,然后再进行相加减,不能使用append
incrbyfloat key step
列表 List
元素是字符串类型
列表头尾增删快,中间增删慢,增删元素是常态
元素可重复
最多可包含 2^32 -1 个元素
索引同 python 列表
# 增
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 和 BRPOP
1、如果弹出的列表不存在或者为空,就会阻塞
2、超时时间设置为0,就是永久阻塞,直到有数据可以弹出
3、如果多个客户端阻塞再同一个列表上,使用First In First Service原则,先到先服务
11、删除指定元素
LREM key count value
count>0:表示从头部开始向表尾搜索,移除与value相等的元素,数量为count
count<0:表示从尾部开始向表头搜索,移除与value相等的元素,数量为count
count=0:移除表中所有与value相等的值
12、保留指定范围内的元素
LTRIM key start stop
LRTIM mylist1 0 2 # 只保留前3条
# 应用场景: 保存微博评论最后500条
LTRIM weibo:comments 0 499
# 改
13、LSET key index newvalue
练习
-- 练习:
-- 1、查看所有的键
keys *
-- 2、向列表 spider:urls 中以RPUSH放入如下几个元素:01_baidu.com、02_taobao.com、03_sina.com、04_jd.com、05_xxx.com
LPUSH spider:urls 01_baidu.com 02_taobao.com 03_sina.com 04_jd.com 05_xxx.com
-- 3、查看列表中所有元素
LRANGE spider:urls 0 -1
-- 4、查看列表长度
LLEN  spider:urls
-- 5、将列表中01_baidu.com 改为 01_tmall.com
LSET spider:urls 0 01_tmall.com
-- 6、在列表中04_jd.com之后再加1个元素 02_taobao.com
LINSERT spider:urls after 04_jd.com 02_taobao.com
-- 7、弹出列表中的最后一个元素
RPOP spider:urls
-- 8、删除列表中所有的 02_taobao.com
LREM spider:urls 0 02_taobao.com
-- 9、剔除列表中的其他元素,只剩前3条
LTRIM spider:urls 0 2

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 20190520
user:10000 user:605 20190521
2、用户维度统计
统计数包括:关注数、粉丝数、喜欢商品数、发帖数
用户为key,不同维度为field,value为统计数
比如关注了5人
HSET user:10000 fans 5
HINCRBY user:10000 fans 1
课堂练习:
1. 用户 ID key Field 为好友 ID Value 为关注时间
问题:
0005 都关注了谁?
0000 什么时候关注的 0003?
0004 取消了对 0003 的关注
0005 2024-09-25 日关注了 0004
用户维度统计
统计数包括:关注数、粉丝数、喜欢商品数、发帖数 用户为 key ,不同维度为 field value 为统计数
问题:
0000 的粉丝增加了 1
0002 取消了一个关注
0001 发表了 3 篇文章
集合
特点
无序、去重
元素是字符串类型
多包含 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
// 结果为: {'peiquser001 = {'peiqi','qiaozhi','danni'}
user002 = {'peiqi','qiaozhi','lingyang'}
user001和user002的共同关注为:
SINTER user001 user002
// 结果为: {'peiqi','qiaozhi'}i','qiaozhi'}
有序集合 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
案例 1: 京东商品畅销榜
-- 记录某平台手机品牌的销量
-- day1 5000 xiaomi 6500 huawei 3200 apple 4300 oppo
-- day2 6500 xiaomi 5800 huawei 3600 apple 2800 oppo
-- day3 3800 xiaomi 3700 huawei 6800 apple 6700 oppo
ZADD day1 5000 xiaomi 6500 huawei 3200 apple 4300 oppo
ZADD day2 6500 xiaomi 5800 huawei 3600 apple 2800 oppo
ZADD day3 3800 xiaomi 3700 huawei 6800 apple 6700 oppo
-- 查看第三天销量排名第一的手机品牌?
ZREVRANGE day3 0 0
-- 查看第二天销量倒数前两名的手机品牌?
ZRANGE day2 0 1
-- 查看第一天销量第二的手机品牌是什么?
ZREVRANGE day1 1 1
-- 查看第三天"huawei"的销量排第几?
ZREVRANK day3 huawei
-- 也支持交集,并集等操作
-- 对numkeys指定的集合的个数,并将对应的key1,key2等集合取并集,然后存入到destination集合中
-- AGGREGATE SUM|MIN|MAX 用于表示集合操作时对score的处理
-- SUM对这些集合中相同member的score求和
-- MIN对这些集合中相同member的score取最小值
-- MAX对这些集合中相同member的score取最小值
-- ZUNIONSTORE destination numkeys key1 key2 ... [AGGREGATE SUM|MIN|MAX]
-- 对day1,day2,day3集合取并集存入到allDays1中
-- 每个member的score使用三个集合中对于该member的最大值
ZUNIONSTORE allDays1 3 day1 day2 day3 AGGREGATE MAX
ZRANGE allDays1 0 -1
-- 对day1,day2,day3集合取并集存入到allDays1中
-- 每个member的score使用三个集合中对于该member的最小值
ZUNIONSTORE allDays2 3 day1 day2 day3 AGGREGATE MIN
ZRANGE allDays2 0 -1
-- 对day1,day2,day3集合取并集存入到allDays1中
-- 每个member的score使用三个集合中对于该member的所有score求和的值
ZUNIONSTORE allDays3 3 day1 day2 day3 AGGREGATE SUM
ZRANGE allDays3 0 -1

redis存储类型

String:SDS(simple Dynamic Srting简单动态字符串)

Hash:压缩列表或哈希表

列表list:双向列表  压缩表

集合set:哈希、整数集合

有序集合:压缩列表 跳表

日志

位图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值