缓存中间件Redis必知必会

作者:逍遥Sean
简介:一个主修Java的Web网站\游戏服务器后端开发者
主页:https://blog.csdn.net/Ureliable
觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言!

前言:
本文是对redis的基本用法操作的整理。
如果需要在linux环境中搭建一个redis服务参考:
Linux环境下搭建使用缓存中间件Redis
如果需要掌握redis的常考知识点参考:
缓存中间件Redis常考知识点

一 十大数据类型

  • 1.String 字符串
 hello world
  • 5.List 列表
[A>B>C>D]
  • 6.Set 集合
{A<B<C}
  • 7.Sorted Set 有序集合
{A:1,B:2,C:3}
  • 4.Hash 哈希表
{a:"hello",b:"world",c,"you"}
  • 2.BitMap 位图
01100112121212
  • 3.BitField 位域
{7912}{121321}{2132213}
  • 8.Geospatial 地理空间
{A:(50.1,0.5)}
  • 9.Hyperlog 基数统计
01101101 0110111 01101101
  • 10.Stream 流 用于消息队列,消息持久化
{id1=time1.seq((a:"foo", a:"bar"))}

二 key的操作命令

  • keys * 查看所有key
  • exists keyname 判断key是否存在
  • type keyname 看key的类型
  • del keyname 删除
  • unlink keyname 非阻塞删除
  • ttl keyname 查看过期时间
  • expire keyname 秒 设置过期时间
  • move keyname dbindex [0- 15] 移动key到数据库db中
  • select dbindex 切换数据库
  • dbsize 查看key的数量
  • flushdb 清空当前库
  • flushall 通杀全部库

三 数据操作命令

string

命令不区分大小写,内容区分大小写

help @String
set keyname helloworld
get keyname

批量操作

mset keyname1 hello keyname2 world
mget keyname1 keyname2

list

双端链表结构,容量是2的32次方 - 1,主要功能是push/pop,用于栈,队列,消息队列等场景

lpush lista 1 2 3
rpush listb 11 22 33
//-1表示全部遍历
lrange lista 0 -1
lpop lista
rpop lista

set

集合运算

sadd seta a b c 1 2
sadd setb 1 2 3 a x
// 只属于seta,但是不属于setb的,输出 b c
sdiff seta setb
// 并集
sunion seta setb
// 交集 输出 1 2 a
sinter seta setb 

四 持久化

1. RDB

配置文件是redis.conf

# 十秒内有两次修改就会执行持久化保存
save 10 2
# 保存路径
dir /myredis/dumpfiles
# 文件名
dbfielname dump.rdb

手动保存
绝对不可以用save,要用bgsave
因为save会阻塞进程
bgsave使用fork的方式

fork:linux系统中,fork()会产生一个与父进程完全相同的子进程

2. AOF

保存操作命令

五 事务

单独的隔离操作
Redis的事务仅仅是保证事务里的操作会被连续独占的执行,redis命令执行是单线程架构,在执行完事务内所有指令前是不可能再去执行其他客户端的请求的

没有隔离级别的概念
因为事务提交前任何指令都不会被实际执行,也就不存在“事务内的查询要看到事务里的更新,在事务外查询不能看到”这种问题了。

不保证原子性
redis的事务不保证原子性,也就是不保证所有指令同时成功或者同时失败,只有决定是否开始执行全部指令的能力,没有执行到一半回滚的能力

排他性
redis会保证一个事务内的命令依次执行,而不会被其他命令插入

怎么玩

  1. discard 取消事务
  2. exec 执行
  3. multi 标记开始
  4. unwatch 取消监控
  5. watch 监控

正常执行
multi -> exec
放弃事务
multi -> discard
全体连坐
编译失败会全部失败
冤头债主
编译成功,但运行失败,只会导致错误的一条不执行,其他条正常执行
watch监控
乐观锁
CAS check and set

注:
悲观锁:每次拿数据都认为别人会修改,所以每次拿数据都会上锁,这样别人想拿这个数据就会block直到它拿到锁
乐观锁:每次拿数据都认为别人不会修改,所以每次拿数据都不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新数据
乐观锁政策:提交版本必须大于记录当前的版本才能执行更新

六 管道

把一组命令写进一个文件里cmd.txt,使用管道命令打包执行

cat cmd.txt | redis-cli -a root --pipe

七 发布订阅

用于消息队列,专门的事交给专门的中间件做,了解即可

八 复制

复制就是 replica 即 主从复制
master以写为主,slave以读为主
当master数据变化时,自动将新的数据异步同步到其他slave数据库

目的

读写分离
容灾恢复
数据备份
水平扩容支撑高并发

用法

配从库不配主库
权限细节很重要,使用密码校验

基本操作命令

# 查看主从关系
info replication
# 配置文件中
replicaof 主库ip 主库端口
# 改换主库
slaveof 主库ip 主库端口
# 自己变更为主库
slaveof no one
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值