C++后端开发(4.3.1)——Redis相关命令详解及其原理


小节提纲

string,set,zset,list,hash
分布式锁的实现
lua脚本解决ACID原子性
Redis事务的ACID性质分析

1.Redis简介

Redis(Remote Dictionary Server ),即远程字典服务
Redis 是内存数据库,KeyValue数据库,数据结构数据库
Redis命令查询

2.应用

  • 记录朋友圈点赞数、评论数和点击数(hash) 记录朋友圈说说列表(排序),便于快速显示朋友圈(list)
  • 记录文章的标题、摘要、作者和封面,用于列表页展示(hash)
  • 记录朋友圈的点赞用户ID列表,评论ID列表,用于显示和去重计数(zset)
  • 缓存热点数据,减少数据库压力(hash)
  • 如果朋友圈说说ID是整数id,可使用redis来分配朋友圈说说id(计数器)(string)
  • 通过集合(set)的交并差集运算来实现记录好友关系(set)
  • 游戏业务中,每局战绩存储(list)

3.安装编译

git clone https://gitee.com/mirrors/redis.git -b 6.2
cd redis
make
make test
make install
# 默认安装在 /usr/local/bin
# redis-server 是服务端程序
# redis-cli 是客户端程序

4.开启

mkdir redis-data
# 把redis文件夹下 redis.conf 拷贝到 redis-data
# 修改 redis.conf
# requirepass 修改密码 123456
# daemonize yes
cd redis-data
redis-server redis.conf
# 通过 redis-cli 访问 redis-server
redis-cli -h 127.0.0.1 -a 123456

5.关闭

这里有3种方式,
# 1.在服务端Ctrl+C,直接退出;
# 2.通过客户端关闭命令:
redis-cli shutdown
# 3.不小心自己使用Ctrl+Z,停止了,可以在客户端关闭,或者找到这个进程将其杀死;
kill -9  ****  #这里****是redis这个进程号

6. 认识Redis

在这里插入图片描述

7.Redis 存储结构

在这里插入图片描述

8.Redis编码方式

在这里插入图片描述

9.STRING

字符数组,该字符串是动态字符串 raw,字符串长度小于1M 时,加倍扩容;
超过 1M 每次只多扩1M;字符串最大长度为 512M;
注意:redis 字符串是二进制安全字符串;
可以存储图片,二进制协议等二进制数据;

9.1基础命令

# 设置 key 的 value 值
SET key val
# 获取 key 的 value
GET key
# 执行原子加一的操作
INCR key
# 执行原子加一个整数的操作
INCRBY key increment
# 执行原子减一的操作
DECR key
# 执行原子减一个整数的操作
DECRBY key decrement
# 如果key不存在,这种情况下等同SET命令。 当key存在时,什么也不做
SETNX key value
# 删除 key val 键值对
DEL key
# 设置或者清空key的value(字符串)在offset处的bit值。
SETBIT key offset value
# 返回key对应的string在offset处的bit值
GETBIT key offset
# 统计字符串被设置为1的bit数.
BITCOUNT key

9.2存储结构

字符串长度小于等于 20 且能转成整数,则使用 int 存储;
字符串长度小于等于 44,则使用 embstr 存储;
字符串长度大于 44,则使用 raw 存储;

9.3应用

9.3.1 对象存储

SET role:10001 '{["name"]:"mark",["sex"]:"male",["age"]:30}'
GET role:10001

9.3.2 累加器

# 统计阅读数 累计加1
incr reads
# 累计加100
incrby reads 100

9.3.3 分布锁

# 加锁
setnx lock 1
# 释放锁
del lock
# 1. 排他功能 2. 加锁行为定义 3. 释放行为定义

9.3.4 位运算

# 月签到功能 10001 用户id 202106 2021年6月份的签到 6月份的第1天
setbit sign:10001:202106 1 1
# 计算 2021年6月份 的签到情况
bitcount sign:10001:202106
# 获取 2021年6月份 第二天的签到情况 1 已签到 0 没有签到
getbit sign:10001:202106 2

10.LIST

双向链表实现,列表首尾操作(删除和增加)时间复杂度 O(1) ;查找中间元素时间复杂度为
O(n) ;
列表中数据是否压缩的依据:
1. 元素长度小于 48,不压缩;
2. 元素压缩前后长度差不超过 8,不压缩;

10.1基础命令

# 从队列的左侧入队一个或多个元素
LPUSH key value [value ...]
# 从队列的左侧弹出一个元素
LPOP key
# 从队列的右侧入队一个或多个元素<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何蔚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值