Redis6课程笔记

1准备工作

启动进入到:/usr/local/bin

开启服务(指定配置文件启动):redis-server /etc/redis.conf

开启客户端:redis-cil

退出客户端:redis-cli shutdown(先退出操作界面:exit)

查看进程:ps -ef|grep redis

特点:单线程+多路IO复用

在这里插入图片描述

2命令

命令说明
set key value设置键值
setnx key value只有在key不存在的时候才设置值
mset key value key value …设置多个key value值
msetnx key value key value …设置多个key value值,一个存在,则全部set失败
setrange key 位置 值给指定位置插入值
setex key 过期时间 value加入过期时间的set值
getset key value以新换旧,设置新值的同时获得旧值
get key获得对应key 的 value
getrange key 起始位置 结束位置起始0,或者value的范围值
mget key key获得多个value值
append key value追加指定的value 到 key 末尾
keys查询库中所以的key
exists key存在key?存在1 不存在0
type keykey 的 类型
setnx key value获得值得长度
del key删除指定的key数据
unlink key非阻塞删除,后台进行异步删除
expire key 1010s后过期
ttl key查看还有多少s过期,-1永不过期,-2已过
incr key让该key对应得数字值value+1
decr key让该key对应得数字值value+1
incrby/decrby key 步长让该key应得数字值value增减指定的步长
select 0-15选择0-15的一个库
dbsize查看当前库的key数量
flushdb清空当前库
flushall通杀全部库

String 类型是二进制安全的意味着Redis的string可以包含任何数据,比如jpg图片,或者序列化的对象,最多可以是512M

List列表

lpush/rpush key value value从左边/右边插入一个或多个值
**lpop/rpop key **从左边/右边吐出一个值.值在键在,值光键亡
rpoplpush key1 key2k1列表右边吐出一个值放到k2列表的左边
lrange key start stop按照索引下标获得元素(左到右)0 -1表示获取所有
lindex key index获得指定索引的value(左到右)
llen key获得列表长度
linsert key before value newvalue在value的后面插入新的value值
lrem key n value从左边删除n个value(左到右)
lset key index value将指定索引的值替换成value

set集合

Set 数据结构是dict字典,字典是用hash表实现的.通过hash表快速查询

sadd key value1 value2 …添加值(已经存在的member元素会被忽略)
smembers key取出集合中的所有值
sismember key value判断集合key中是否含有该value值
scard key返回该集合元素个数
srem key value1 value2 …删除集合中的某个元素
spop key随机从集合中吐出一个值
srandmember key n随机从该集合中取出n个值
smove key1 key2 value把key1集合中的一个值从一个集合移动到key2集合
sinter key1 key2返回俩个集合的交集
sunion key1 key2返回俩个集合的并集
sdiff key1 key2返回俩个集合的差集元素(key1中的,不包含key2中的)

hash集合

hset key field value给key集合的field 赋值value
hmset key field1 value1 field2 value2 …给key集合赋多个值
hget key field在key集合中取出指定field的值
hexists key field判断存在
hkeys key列出该hash集合的所有field
hvals key列出该hash集合的所有fvalue
hincrby key field increment为hash表key中的域field的值加上增量1 -1
hsetnx key field value将hash表key中的域field的值设置为value,当且仅当域field不存在

Zset有序集合

没有重复元素,集合的成员是唯一的,但是评分是可以重复的

zadd key score1 value1 score2 value2添加值,给定评分
zrange key start stop [withscores]查看指定范围[带评分显示]
zrangebyscore key min max [withscores] [limit offset count]查看min<=score<=max的value
zrevrangebyscore key min max同上,从大到小排序
zincrby key increment value为元素的score加上增亮
zrem key value删除该集合下,指定值的元素
zcount key min max统计该集合,分数区间内的元素个数
zrank key value返回该值在集合中的排名,从0开始

3redis6新增数据类型

3.1HyperLogLog

面对基数问题,如:求集合不重复元素个数,独立访客数等,相比set等集合,节省了非常非常非常多的空间

pfadd key value1 value2添加操作
pfcount key查看数量
pfmerge newkey oldkey1 oldkey2将一个或多个HLL合并后的结果存储在另一个HLL中

3.2GEO

GEO,Geographic,地理信息的缩写,元素的2维坐标,在地图上就是经纬度,有效经度在-180到180,有效纬度在-85.05112878到85.05112878,超出报错,

已经添加的数据无法再次添加

例如
geoadd key 经度 纬度 name添加geoadd china:city 121.47 31.23 shanghai
geopos key name获得geopos china:city shanghai
geodist key1 name1 name2 单位获得俩个地方的直线距离geodist china:city shanghai beijing km
georadius key 经度 纬度 距离获得指定以指定经纬度为中心,获得指定范围内的城市georadius china:city 110 30 1000km

4事务

命令队列,串联命令

1.从输入multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,知道输入Exec后,Redis会将之前的命令队列中的命令依次执行

2(区别mysql).在组队阶段出现语法错误,执行exec命令后整个事务报错

在执行阶段出现的错误,只会影响对应命令的执行,其他命令正常执行

在这里插入图片描述

3.乐观锁实现事务!使用版本号机制,对数据绑定版本,修改数据后对应修改版本,在用户操作数据时会确认用户取到的key值版本与当前数据库key值版本是否一致,一致则事务执行成功,反之!

multi开启事务队列
exec执行事务队列
discard取消事务队列
watch key1 key2监视key:在执行multi之前,先执行watch key,可以监视指定的key,如果事务执行之前,这个key被其他命令所改动,那么事务被打断(乐观锁)
unwatch取消监视

4.1事务三特性

1.单独的隔离操作:事务中的所有命令都会序列化,按顺序的执行.事务在执行的过程中,不会被其他客户端发来的命令请求所打断.

2.没有隔离级别的概念:队列中的命令没有提交之前都不会被实际执行,因为事务提交前任何指令都不会被实际执行

3.不保证原子性:事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚.


5主从复制

一台主机,多台从机

主机可以进行读写操作

从机只能进行读操作

若主机宕机,重启之后主机依然是关联之前的从机,数据信息恢复

若从机宕机,重启之后所以信息清空,失去主从关系,需要重新确立主从关系,并且复制主机的数据

薪火相传:从机可以成为其他从机的从机,也就是master->slave->slave->…

而不止是master一下拥有一堆slave,这样可以减轻主机的管理压力,但是相应的,如果其中一台slave宕机,则会影响后面slave的数据.

命令说明
info replication打印主从复制的相关信息
slaveof ip port成为某个实例的从服务器
slaveof no one将该从机变为主机(反客为主)

5.1哨兵模式

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库.

如何启用?

1

新建sentinel.conf 文件,内容为:

sentinel monitor mymaster 127.0.0.1 6379 1

其中mymaster为监控对象起的服务器名称(别名), 1 为至少有多少个哨兵同意迁移的数量(至少有1个哨兵响应了,就可以执行反客为主).

2

/usr/local/bin
redis做压测可以用自带的redis-benchmark工具
执行redis-sentinel sentinel.conf
在这里插入图片描述

怎么确定哪台从机反客成主机master?

1.先根据优先级别,启动服务的配置文件中优先级的:replica-priority 100

值越小优先级越高

2.偏移量:指获得原主机数据最全的.

3.runid:每个实例启动后都会随机生成一个40位的runid

集群

什么是集群?

集合群体,即用多个redis节点分摊单个节点的压力,

我们启动N个节点组成集群,那么我们数据就会分布存储在这N个节点中,每个节点存储1/N的数据量.

redis的每个节点都分布着均分的插槽(slot)数量,当我们存入数据时(set等操作),会生成插槽值,根据该插槽值将数据存放到对应的节点!


如何创建集群?

配置文件修改指定参数

daemonize yes 开启守护进程

cluster-enabled yes 打开集群模式

cluster-config-file nodes.conf 设定节点配置文件名

cluster-node-timeout 15000 设定节点失联时间(毫秒),节点自动进行主从切换

进入 /opt/redis-x.x.x/src 目录,输入命令

redis-cli --cluster create --cluster-replicas 1 IP:端口 IP:prot  IP:prot  IP:prot IP:prot  IP:prot

1,代表的是一台主机对应一台从机


命令

redis-cli -c -p 6379-c采用集群策略连接
cluster nodes查看集群信息
cluster getkeysinslot 返回count个solt槽中的键

不在一个solt下的键值,是不能使用mget,mset等多建操作的.

在这里插入图片描述

可以通过{}来定义组的概念,从而使key中{}内相同内容的键值对放到一个slot中去

在这里插入图片描述

说明

如果某一段插槽的主从都挂掉,而配置文件中的

cluster-require-full-coverage为yes,那么整个集群都会挂掉,反之.

也遵循反客为主,对于相同插槽的主从机!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值