Redis

Redis

一、Redis 安装

​ ① 将 Redis 的 tar 包上传到 /opt/software 目录下,并解压到 /opt/module 下

​ ② 安装 gcc 环境 redis是C语言编写的!要有gcc-c++ 环境

​ yum install –y gcc-c++

​ 查看安装是否成功:rpm –qa|grep gcc

在这里插入图片描述

​ ③ 查看 make 是否安装

​ ④ 进入到 /opt/module/redis.xxx/src 目录下执行 make && make install

​ ⑤ 安装成功,文件会被安装到 /usr/local/bin目录

二、启动

服务端启动

​ 在家目录下创建一个 myredis 目录,将 拷贝 /opt/module/redis.xxx/redis.conf 配置文件到 myredis 中用于启动

​ 命令: redis-server redis.conf

​ 修改配置文件 daemonize yes,改为守护进程,使进程在后台运行。

​ 后台启动后,查看服务: netstat –anp|grep 6379

客户端启动

​ redis-cli -h 服务端的hostname(默认127.0.0.1) -p 服务端端口号(6379)

命令说明备注
redis-cli启动客户端直接执行的话,默认端口号就是6379;
ping测试联通回复pong代表联通
exit退出客户端
redis-cli shutdown停止服务器redis是通过客户端发送停止服务器的命令

三、Redis 基本操作

数据库连接操作

命令说明
select 切换数据库,默认为[0-15] 共计16个库
flushdb清空当前库
dbsize查看数据库数据个数
flushall通杀全部库

key 的操作

表达式描述
KEYS pattern查询符合指定表达式的所有key,支持*,?等
TYPE key查看key对应值的类型
EXISTS key指定的key是否存在,0代表不存在,1代表存在
DEL key删除指定key
RANDOMKEY在现有的KEY中随机返回一个
EXPIRE key seconds为键值设置过期时间,单位是秒,过期后key会被redis移除
TTL key查看key还有多少秒过期,-1表示永不过期,-2表示已过期
RENAME key newkey重命名一个key,NEWKEY不管是否是已经存在的都会执行,如果NEWKEY已经存在则会被覆盖
RENAMENX key newkey只有在NEWKEY不存在时能够执行成功,否则失败

常用的五大数据类型

​ Redis中的数据以键值对(key-value)为基本存储方式,其中key都是字符串,这里探讨数据类型都是探讨value的类型。

表达式描述
string字符串
list可以重复的集合
set不可以重复的集合
hash类似于Map<String,String>
zset(sorted set)带分数的set

String 操作

​ Redis中一个字符串值的最大容量是512M。

​ String类型是Redis中最基本的类型,它是key对应的一个单一值。

​ 二进制安全,不必担心由于编码等问题导致二进制数据变化。所以redis的string可以包含任何数据,比如jpg图片或者序列化的对象。

表达式描述
SET key value添加键值对
GET key查询指定key的值
APPEND key value将给定的value追加到原值的末尾
STRLEN key获取值的长度
SETNX key value只有在 key 不存在时设置 key 的值
INCR key指定key的值自增1,只对数字有效
DECR key指定key的值自减1,只对数字有效
INCRBY key num自增num
DECRBY key num自减num
MSET key1 value1 key2 value2…同时设置多个key-value对
MGET key1 key2同时获取一个或多个value
MSETNX key1 value1 key2 value2当key不存在时,设置多个key-value对
GETRANGE key 起始索引 结束索引获取指定范围的值,都是闭区间
SETRANGE key 起始索引 value从起始位置开始覆写指定的值
GETSET key value以新换旧,同时获取旧值
SETEX key 过期时间 value设置键值的同时,设置过期时间,单位秒

List 操作

​ 在Redis中,list是双向链表。可以从两侧插入,对两端的操作性能很高,通过下标操作中间的节点性能会较差。 遍历:遍历的时候,是从左往右取值;

​ 删除:弹栈,POP;

​ 添加:压栈,PUSH ;

表达式描述
LPUSH/RPUSH key value1 value2…从左边/右边压入一个或多个值 头尾效率高,中间效率低
LPOP/RPOP key从左边/右边弹出一个值 值在键在,值光键亡 弹出=返回+删除
LRANGE key start stop查看指定区间的元素 正着数:0,1,2,3,… 倒着数:-1,-2,-3,…
LINDEX key index按照索引下标获取元素(从左到右)
LLEN key获取列表长度
LINSERT key BEFORE|AFTER value newvalue在指定 value 的前后插入 newvalue
LREM key n value从左边删除 n 个 value
LSET key index value把指定索引位置的元素替换为另一个值
LTRIM key start stop仅保留指定区间的数据
RPOPLPUSH key1 key2从 key1 右边弹出一个值,左侧压入到 key2

Set 操作

​ Set 是无序的,且是不可重复的。

表达式描述
SADD key member [member …]将一个或多个元素加入到集合 key,已经存在的 member 元素将被忽略。
SMEMBERS key取出该集合的所有值
SISMEMBER key value判断集合是否为含有该值,有返回1,没有返回0
SCARD key返回集合中元素的数量
SREM key member [member …]从集合中删除元素
SPOP key [count]从集合中随机弹出count个数量的元素,count不指定就弹出1个
SRANDMEMBER key [count]从集合中随机返回count个数量的元素,count不指定就返回1个
SINTER key [key …]将指定的集合进行“交集”操作
SINTERSTORE dest key [key …]取交集,另存为一个set
SUNION key [key …]将指定的集合执行“并集”操作
SUNIONSTORE dest key [key …]取并集,另存为set
SDIFF key [key …]将指定的集合执行“差集”操作
SDIFFSTORE dest key [key …]取差集,另存为set

Hash 操作

在这里插入图片描述

​ 常用操作:

表达式描述
HSET key field value为key中的field赋值value
HMSET key field value [field value …]为指定key批量设置field-value
HSETNX key field value当指定key的field不存在时,设置其value
HGETALL key获取指定key的所有信息(field和value)
HKEYS key获取指定key的所有field
HVALS key获取指定key的所有value
HLEN key指定key的field个数
HGET key field从key中根据field取出value
HMGET key field [field …]为指定key获取多个filed的值
HEXISTS key field指定key是否有field
HINCRBY key field increment为指定key的field加上增量increment

Zset操作

​ Zset是一种特殊的 set(sorted set),在保存 value 的时候,为每个 value 多保存了一个 score 信息。默认通过 score 对元素进行排序,可以通过下标类对元素进行定位。

表达式描述
ZADD key [score member …]添加
ZSCORE key member返回指定值的分数
ZRANGE key start stop [WITHSCORES]返回指定区间的值,可选择是否一起返回scores
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]在分数的指定区间返回数据,从小到大排列
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]在分数的指定区间内返回数据,从大到小排列
ZCARD key返回集合中所有的元素的数量
ZCOUNT key min max统计分数区间内的元素个数
ZREM key member删除该集合下,指定值的元素
ZRANK key member返回该值在集合中的排名,从0开始
ZINCRBY key increment value为元素的 score 加上增量

四、Redis 配置文件

单位说明

在这里插入图片描述

​ 1k和1kb是不同的;单位的大小写不敏感!

include

​ 可以将公共的配置放入到一个公共的配置文件中,然后通过子配置文件引入父配置文件中的内容!

将配置按照模块分开!

在这里插入图片描述

network

在这里插入图片描述

general

在这里插入图片描述

其他

在这里插入图片描述

五、持久化

​ Redis主要是工作在内存中。内存本身就不是一个持久化设备,断电后数据会清空。所以Redis在工作过程中,如果发生了意外停电事故,如何尽可能减少数据丢失。

RDB(快照存储)

​ RDB:在指定的时间间隔内将内存中的数据集快照写入磁盘,redis 在启动时会默认读取指定配置的快照文件,将快照文件中的数据读到内存里。

​ 工作机制:每隔一段时间,就把内存中的数据保存到硬盘上的指定文件中。RDB是默认开启的!

​ RDB的缺点是最后一次持久化后的数据可能丢失。

​ Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。

​ RDB常用属性配置:

在这里插入图片描述

​ RDB的触发:

​ ①基于自动保存的策略

​ ②执行 save,或者 bgsave 命令!执行时,是阻塞状态。

​ ③执行 flushall 命令,也会产生 dump.rdb,但里面是空的,没有意义。

​ ④当执行 shutdown 命令时,也会主动地备份数据。

​ RDB 自动保存策略:

​ save 900 1 900 秒内如果至少有 1 个 key 的值变化,则保存

​ save 300 10 300 秒内如果至少有 10 个 key 的值变化,则保存

​ save 60 10000 60 秒内如果至少有 10000 个 key 的值变化,则保存

​ save “” 就是禁用RDB模式;

​ ReDB 的缺点:

​ RDB是全盘备份,但数据量过大时,不适合频繁进行备份。

​ 有可能丢失最后一次备份后的数据。

AOF(日志存储)

​ AOF是以日志的形式来记录每个写操作,将每一次对数据进行修改,把新建、修改数据的命令保存到指定文件中。Redis重新启动时读取这个文件,重新执行新建、修改数据的命令恢复数据。

​ 默认不开启,需要手动开启。

​ AOF文件的保存路径,同RDB的路径一致。

​ AOF在保存命令的时候,只会保存对数据有修改的命令,也就是写操作!

​ 当RDB和AOF存的不一致的情况下,按照AOF来恢复。因为AOF是对RDB的补充。备份周期更短,也就更可靠。

​ 保存策略:

​ ① appendfsync always:每次产生一条新的修改数据的命令都执行保存操作;效率低,但是安全!

​ ② appendfsync everysec:每秒执行一次保存操作。如果在未保存当前秒内操作时发生了断电,仍然会导致一部分数据丢失(即1秒钟的数据)。

​ ③ appendfsync no:从不保存,将数据交给操作系统来处理。更快,也更不安全的选择。

​ 推荐(并且也是默认)的措施为每秒 fsync 一次, 这种 fsync 策略可以兼顾速度和安全性。

​ AOF 常用配置

在这里插入图片描述

​ AOF文件的修复:

​ 如果AOF文件中出现了残余命令,会导致服务器无法重启。此时需要借助 redis-check-aof 工具来修复!

​ 命令: redis-check-aof --fix 文件

六、事务

​ Redis中的事务指的是一个单独的隔离操作。

​ Redis事务的主要作用是串联多个命令防止别的命令插队。

​ Redis的事务中的所有命令都会序列化、按顺序地执行且不会被其他客户端发送来的命令请求所打断。

事务常用命令

命令描述
MULTI开始事务:标记一个事务块的开始。
EXEC执行事务:事务中所有在排队等待的指令并将链接状态恢复到正常 当使用WATCH 时,只有当被监视的键没有被修改,且允许检查设定机制时,EXEC会被执行。
DISCARD解散事务:释放一个事务中所有在排队等待的指令,并且将连接状态恢复到正常。 如果已使用WATCH,DISCARD将释放所有被 WATCH 的key。
WATCH锁:标记所有指定的 key 被监视起来,在事务中有条件的执行(乐观锁)。

​ 说明:MULTI 开启组队,EXEC 依次执行队列中的命令。

​ DISCARD 中途取消组队。

在这里插入图片描述

​ Redis 只有在执行中,才可以发现错误。而在 Redis 中,并没有回滚机制,因此当符合语法的命令出错时,该命令无法执行,但不会影响其他正确命令的执行!

在这里插入图片描述

​ 但是如果在编译的过程中,Redis 检测出队列中语法错误的命令,那么该组队全体取消。

  • 悲观锁

    ​ 在做操作前就会把相关资源锁定,不允许自己执行期间有其他操作干扰。

    Redis 不支持悲观锁。Redis 作为缓存服务器使用时,以读操作为主,很少写操作,相应的操作被打断的几率较少。不采用悲观锁是为了防止降低性能。

  • 乐观锁

    ​ 在做操作前不会锁定资源,万一发生了其他操作的干扰,那么本次操作将被放弃。

  • Redis 中的锁的策略

    ​ Redis 采用了乐观锁策略(通过 watch 操作)。乐观锁支持读操作,适用于多读少写的情况!

    ​ 在事务中,可以通过 watch 命令来加锁;使用 UNWATCH 可以取消加锁

    ​ 如果在事务之前,执行了 WATCH(加锁),那么执行 EXEC 命令或 DISCARD 命令后,锁会自动释放。

七、Redis 消息订阅

命令描述
SUBCRIBE [频道]订阅频道 ,可订阅多个平道
PUBLISH [频道] [消息]向指定频道发布消息

​ 订阅者订阅消息:订阅者订阅消息后,此时控制台会处于阻塞状态,用于接收发布者发布的消息。

在这里插入图片描述

​ 发布者发布消息:

在这里插入图片描述

​ 订阅者收到消息:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值