redis学习笔记

基础操作

  • redis是以单进程模型来处理客户端的请求,对读写等时间响应是通过epoll函数的包装来做到
  • redis 默认有16个库,可以通过select + 数字来切换redis库 例:select 2 意为切换到下标为2的数据库
  • dbsize查看数据库key的数量,输入keys *查看各个key名
  • flushdb清除当前库的所有键。flushall清除redis库的键
  • exists key :判断某key是否存在 .
  • move key db:移动键至另外的redis库,当前库就没有了.例:move k1 2 (将key为k1的键移动至index为2的redis库里)
  • ttl key(查看key还有几秒过期),-1表示永不过期,-2表示已过期(过期之后表示生命周期已终结,会被移除redis内存)
  • expire key 秒钟:为给定的key设置过期时间
  • type key 查看key是什么类型

数据类型

  • 五大数据类型:String(字符串),Hash(哈希),List(列表),Set(集合),Zset(sorted set:有序集合)
  • redis 的string可以包含任何数据,比如jpg图片或者序列化的对象。
  • string是redis最基本的数据类型,一个redis中字符串value最多可以是512M

String

  • string类型常见操作函数
函数含义
set key value设置值(已有key会将其覆盖)
get key获取key的值
del key删除key
append key value在key值后面添加value值
strlen返回key值的长度
Incr/decr key加1/减1
incrby/decrby key value对key值进行加/减 value
getrange key start end获取指定区间范围的值
setrange key start value设置指定区间范围的值 格式:setrange key值 起始下标 设置的值value
setex key time value设置值并设置过期时间(秒)
setnx key value判断key是否存在,如果key不存在则设置为value。设置成功返回1,设置失败返回0
mget/mset/msetnx批量读取,批量设置,msetnx(批量设置,一个失败全部失败)

list

  • list常见操作
函数含义
lpush/rpush创建list(lpush 读取时显示输入相反,先进后出。rpush则存取读取顺序一样,先进先出)例:lpush list01 1 2 3 4 5
lrange list start end读取列表 格式:lrange 列表名 起始下标 终止下标
lpop/rpoplpop:清除第一个元素(栈顶元素) rpop:清除最后一个元素(栈底元素)
lindex list index按照索引下标获得元素(从上到下)格式:lindex list名 下标
len获取列表的长度
lrem删n个value 格式:lrem list名 num value
ltrim截取指定范围的值后再重新赋值给key 格式:ltrim key 开始index 结束index
  • list允许重复,set不允许重复

set

  • set常见操作
函数含义
sadd向集合中添加一个或多个成员
smembers查看集合成员
sismember判断key是否为set成员。格式:sismember key值 member成员值
scard获取集合里面的元素个数
srem删除集合中的元素 格式:srem key值 value值(要删除的值)
srandmember某个整数(随机出几个数)格式:srandmember key值 num(要随机的数目)
spop随机出栈(会返回被删除的成员)
smove key1 key2将key1里的某个值赋给key2 格式 smove key1值 key2值 key1里的值
sdiff差集,格式sdiff key1 key2 返回在第一个set里面而不再后面任何一个set里面的项
sinter交集 ,格式sdiff key1 key2 返回第一个set跟后面set共同拥有的项
sunion并集 ,格式sdiff key1 key2 返回所有set的项并去重

hash

  • hash常见操作
函数含义
hset设置hash 格式:hset 哈希表名 key value
hget获取键值 格式:hget 哈希表名 key
hmset批量设值 格式:hmset 哈希表名 key1 value1 key2 value2
hmget批量获取值 格式:hmget 哈希表名 key1 key2
hgetall获取整个表 格式:hgetall 哈希表名
hdel删除 格式:hdel 哈希表名 key
hlen获取哈希表的长度
hexists判断key是否存在 格式:hexists 哈希表名 key
hkeys获取哈希表的所有key
hvals获取哈希表的所有value
hincrby对哈希表中的某个值进行增加(整数) 格式:hincrby 哈希表名 key num
hincbyfloat对哈希表中的某个值进行增加(小数) 格式:hincrby 哈希表名 key num
hsetnx如果不存在则设值

zset

  • zset 是在set的基础上,加一个score值。set是key1 value1 value2 value3。zset是key1 score1 value1 score2 value2
  • zset 常见操作
函数含义
zadd向集合里面添加成员 格式:zadd key值 score1值 value1
zrange获取值,格式:zrange key值 start end (如果加上withscores,则连同分数一起返回)
zrangebyscore获取某个分数范围的值 格式 zrangescore 开始score 结束score(在score前加“(”表示为不包含)
zrem删除元素
zcard统计key下的元素个数
zcount统计分数区间内的元素个数。格式:zcount key 开始score 结束score
zrank获取某个键值的下标 格式:zrank key值 value
zscore获取某个值的分数 格式:zrank key值 value
zrevrank逆序获取某个键值的下标
zrevrange逆序获取值
zrevrangebyscore逆序获取某个分数范围的值 格式 zrangescore 结束score 开始score

事务

  • redis事务:可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞
  • redis事务常见操作
函数含义
multi标记一个事务块的开始
exec执行所有事务块内的命令
discard取消事务,放弃执行事务块内的所有命令
watch key[key…]监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断
unwatch取消watch命令对所有key的监视
  • redis事务一旦加入了队列,即使它报错了它也会往下执行,不会影响其他队列的执行。只有在加入队列时报错(即不符合语法的命令),无法加入队列,事务才会整个回滚撤销
  • 悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁,传统的关系型数据库库里面就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁
  • 乐观锁(Optimistic Lock),顾名思议,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候回判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制,乐观锁适用于多读的应用类型,这样可以提高吞吐量。
  • 乐观锁策略:提交版本必须大于当前版本才能执行更新

淘汰策略

  • redis默认端口6379
  • redis是存在内存的一个缓存服务器
  • redis的日志模式分为四个模式,debug,verbose,notice,warning,默认为verbose。
  • 开发测试阶段可以将配置里的loglevel改为debug调试模式,上线之后可以将loglevel更改为notice或warning
  • 可以通过输入config set requirepass +密码来设置连接redis的密码
  • LRU算法,least RecentlyUsed,最近最少使用算法。也就是说默认删除最近最少使用的键。
  • redis的过期淘汰策略
规则名称规则说明
volatile-lru使用LRU算法删除一个键(只对设置了生存时间的键)
allkeys-lru使用LRU算法删除一个键
volatile-random随机删除一个键(只对设置了生存时间的键)
allkeys-random随机删除一个键
volatile-ttl删除生存时间最近的一个键
noeviction不删除键,只返回错误

持久化

  • redis持久化:rdb(Redis DataBase)与aof(Append Only File)

Rdb

  • rdb:在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是snapshot快照,它恢复时是将快照文件直接读到内存里
  • redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件
  • 如果需要进行大规模数据的恢复,且对数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效,RDB的缺点就是最后一次持久化后的数据可能丢失
  • 可以通过修改配置文件的save指令来制定持久化策略。指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配置。redis默认配置文件中提供了三个条件:save 900 1 save 300 10 save 60 10000 分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
  • RDB优点
  1. RDB是一个非常紧凑的文件
  2. RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化可以最大化redis的性能
  3. 与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些
  • RDB缺点
  1. 数据丢失风险大
  2. RDB需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候,fork的进程是非常耗时的,可能会导致redis在一些毫秒级不能响应客户端请求

Aof

  • redis默认开启RDB进行数据存储,AOF默认关闭,可以通过修改配置文件里的appendonly改为yes来开启AOF持久化
  • AOF:以日志的形式来记录每个写操作,将redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将指令从前到后执行一次以完成数据的恢复工作
  • AOF与RDB能同时开启,如果AOF开启了则优先加载AOF
  • AOF异常修复:先备份被写坏的AOF文件,再执行redis目录下的Redis-check-aof —flx进行语法检查并修复,再重启redis
  • AOF采用的是文件追加方式,文件会越来越大,为避免这种情况,它里面新增了重写机制。当AOF文件的大小超过所设定的阈值时,redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集
  • AOF重写触发机制:redis会记录上次重写时的AOF的大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发
  • AOF优点
  1. AOF文件时一个只进行追加的日志文件
  2. Redis可以再AOF文件体积变得过大时,自动地在后台对AOF进行重写
  3. AOF文件有序地保存了对数据库执行的所有写入操作,这些写入操作以redis协议的格式保存,因此AOF文件的内容非常容易被人读懂,对文件进行分析也很轻松
  • AOF缺陷
  1. 对于相同的数据集来说,AOF文件的体积通常要大于RDB文件的体积
  2. 根据使用的fsync策略,AOF的速度可能要慢于RDB
    文件时一个只进行追加的日志文件

主从复制

  • 主从复制:主机数据更新后根据配置跟策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主
  • 主从复制实现:
  1. 配从(salve库)不配主(master库)。
  • 就是不对主库进行配置,直接在从库的配置里面声明自己是从库身份并指定主库ip
  • 从库配置:slaveof 主库ip 主库端口
  1. 常用三招
  • 一主二仆
  • 薪火相传:slave库作为另外redis库的主库
  • 反客为主: slaveof no one
  • info replication:查看自己是slave库还是master库
  • slaveof 主库ip 主库端口 :声明自己为从库,指定主库ip
  • slaveof no one :身份转为master,不作slave(反客为主)
  • 在没配置的情况下,当master库崩掉后,slave库原地待命,等待master库重连
  • 当slave库被另外的redis库当成主库时,它的身份依旧是slave
  • 复制原理:
  1. Slave启动成功连接到master后会发送一个sync命令
  2. Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步(全量复制)
  • 全量复制:slave服务在接受到数据文件数据后,将其存盘并加载到内存中
  • 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
  • 主从复制开始首次加载时全量复制,之后的是增量复制
  • 只要是重新连接master,一次完全同步(全量复制)将被自动执行

哨兵模式

  • 哨兵模式(反客为主的自动版):通过创建sentinel.conf配置文件输入“redis-sentinel sentinel.conf”启动哨兵来后台监控主机是否故障,如果故障了根据投票数自动将从库转换成主库
  • 在哨兵模式下,master一旦故障就会有新的slave身份转换为master,成功上位,即使之前的master重连了,那它的身份也会变成slave。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
尚硅谷是一个教育机构,他们提供了一份关于Redis学习笔记。根据提供的引用内容,我们可以了解到他们提到了一些关于Redis配置和使用的内容。 首先,在引用中提到了通过执行命令"vi /redis-6.2.6/redis.conf"来编辑Redis配置文件。这个命令可以让你进入只读模式来查询"daemonize"配置项的位置。 在引用中提到了Redis会根据键值计算出应该送往的插槽,并且如果不是该客户端对应服务器的插槽,Redis会报错并告知应该前往的Redis实例的地址和端口。 在引用中提到了通过修改Redis的配置文件来指定Redis的日志文件位置。可以使用命令"sudo vim /etc/redis.conf"来编辑Redis的配置文件,并且在文件中指定日志文件的位置。 通过这些引用内容,我们可以得出结论,尚硅谷的Redis学习笔记涵盖了关于Redis的配置和使用的内容,并提供了一些相关的命令和操作示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis学习笔记--尚硅谷](https://blog.csdn.net/HHCS231/article/details/123637379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis学习笔记——尚硅谷](https://blog.csdn.net/qq_48092631/article/details/129662119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

humanyr

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

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

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

打赏作者

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

抵扣说明:

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

余额充值