rdis笔记

redis

启动:
两种:

后台启动

cd /usr/local/soft/redis/bin  :存放redis的地址。进入bin目录
 
nohup redis-server redis.conf &  : 将日志放在bin目录下的nohup目录下
:注意不存放就直接将日志打印在控制台上
连接redis
redis-cli
redis-cli --help

rediscli -n 2
插入一条数据
set key1 value1

mset k1 v1 k2 v2 :代表可以多次存储

注意:如果存储同样的k 则会把新的value覆盖着旧的value上
查询数据
get key1 
mget key1 key2 :代表可以多次取
keys pattern
pattern * 任意长度
        ? 任意一个字符
        []字符集合,表示可以是集合中的任意一个
        例如:all1 1
             all2 2
             alt  3 
             keys * :就是查询所有
             keys all*:就是查询all1,all2
             keys all?:后面匹配一个
             keys all[1,2]:查询all1,all2
查询所有
keys * 
设置过期时间
set k value [选项]

​        选项   

​                          EX:代表秒

​                           PX:代表毫秒

 例如:set k v EX 5: 代表这条数据五秒后会被删除


查询当前redis占用端口号
ps -aux | grep redis
查询剩余时间
TLL Key
PTTL Key
key存在但没有设置TTL,返回 -1
key存在,但还在生存期内,返回剩余的秒或者毫秒
key曾经存在,但已经消亡,返回-2(2.8版本之前返回-1)

删除
del key
删除当前库中数据
fulshdb
删除所有库中数据
flushall
查询value长度
strlen key
追加
append k abc:表示在k后面追加abc
如果k是空,则追加就是添加abc,也就是创建abc
如果键存在就追加,如果不存在就创建  
获取子字符串
getrange key start end

索引值从0开始,负数表示从字符串右边向左数起,-1表示最后一个字体
覆盖字符串
setrange key offset value
自增
incr key:自增一

decr key:自减一

字符串会报错
自定义自增
incrby key decrement

decrby key decrement

decrement代表改变的单位大小
位图bitmap
位图不是真正的数据类型,它是定义在字符串类型中

一个字符串类型的值最多能存储512字节的内容

位上限:2^(9+10+10+3)=2^32b
获取某一位上的值
getbit keuy offset
设置某一位上得值
setbit key offset value
offset偏移量,从0开始
value不写,,默认是0
例如:key a   a的二进制(0110 0001)
设置setbit key 7 0
setbit key 6 1 
则取key的直接就会变成b  b的二进制(0110 0010)
返回指定值0或者1在指定区间上第一次出现的位置
bitpos key bit【start】【end】
位操作
对一个或多个保存二进制的字符串key进行位元操作,并将结果保存到dteskey上

bitop and destkey key【key ...】与 :对一个或多个key求逻辑并,将结果保存到destkey上

bitop or destkey key 【key...】或:

bitop xor destkey 【key...】 异或:

bitop not destkey key 【key ...】

除了not,其他都可以多个操作

当bitop处理不同长度的字符串是,较短的那个字符串所缺少的部分会被看作0

空的key也被看作是包含0的字符串序列
统计指定位区间上值为1的个数
bitcount key 【start】【end】

从左向右从0开始,从右向左从-1开始,注意官方start丶end

bitcount testkey  0  0表示从索引为0个字节,注意也就是八位为一字节

bitcount testkey 0 -1 等同于bitcount testkey
list列表
基于linked list实现

元素字符串类型

列表头尾增删快,中间增删慢,增删元素是常态

元素可以重复出现

最多报刊2^32-1元素
索引
从左至右,从0开始

从右至左,-1开始
存入数据
lpush key value 【value ...】 :从左往右压

lpushx key value  

rpush key value 【value ... 】:从右往左压

rpush key value
左右或者头尾弹出元素
lpop key

rpop key

阻塞
如果弹出列表不存在或者为空,就会阻塞
超时时间设置为0,就是永久阻塞,直到有数据可以弹出
例如
blpop key【key...】timeout
brpop key 【key ...】timeout
例如:blpop k 5  就是等待五秒弹出,如果没有k中没有数据,就会阻塞
从一个列表尾部弹出元素压入另一个列表头部
rpoplpush source destination

从一个列表尾部阻塞弹出元素压入另一个列表头部
brpoplpush source detination timeout
返回列表中指定范围,也就是查询
lrange key start stop

lrange key 0 -1 表示返回所有元素
获取指定位置的元素
lindex key index
设置指定元素数据
lset key index value
列表长度,元素个数
llen key
从列表头部开始删除值等于value的元素count次

lrem key count value 

count>0:从表头开始向表尾搜索,移除与value相等的元素,数量为count

count<0:从表尾开始向表头搜索,移除与value相等的元素,数量为count

例如:

lrem listkey 2 java ;从左开始删除value=java,两次


Hash存
hset key    [属性] value

例如:hset student:1 id 123     

​          hset student:1 name 张三

存储多个

  hmset key  【属性】 value  【属性】 value ...

例如:

  hmset  student:1 ID 123  name 张三  sex 李四
hash取:
  hget  key    [属性] value

例如:hget student:1 id 

取多个:

  hmget key  【属性】 value  【属性】 value ...

例如:

  hmset  student:1 ID   name   sex  
set存取
sadd key member【member ...】

如果元素已存在,则自动忽略

例如

sadd friends peter

sadd friends java redis
移除一个或多个
srem key member 【member...】

srem friend peter

srem friend java redis
返回几个包含的所有元素
smembers key

例如:

smembers friend

如果集合元素过多,例如百万个,需要遍历,会造成阻塞
检查给定元素是否存在于集合中
sismember key member

例如:

sismembe friend java
随机返回集合中指定个数的
srandmember key count

count为正数,且小于集合基数,那么命令返回一个包含count个元素的数组,

​    数组中的元素各不相同。如果count大于等于集合基数,那么返回整个集合

count为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度

​    为count的绝对值

count=0 返回空

   count不指定,随机返回一个元素

例如:

srandmember friend 3

srandmember friend -5
出栈
spop
set集合操作
差集

sdiff   key1  [key...]

例如: a 1 2 3

​             b 1 4 5       那么sdiff a b  =  2 3

sdiffstore destination key [key..]   将差集保存到destination中

交集

sinter key 【key...】

sinterstore destination key [key..]   将交集保存到destination中

例如: a 1 2 3

​             b 1 2 4 5       那么sdiff a b  =  12 
有序集合
增加一个或多个元素
zadd key score member 【score member...】

如果元素已存在,则使用新的score
zadd key  1 java 2Hadoop 3 python
移除一个或者多个元素
zrem key member【member...】

元素不存在,自动忽略
显示分值
zscore key member

举例 zcore key java 
增加或者减少分值
zincrby key increment【member】

increment为负数就是减少

例如:

​    zincrby key   2 java

​     zincrby  key  -1  python
返回元素的排名(索引)

zrank key member

例如:

​ zrank key java

返回元素的逆序排名
zrevrank key member
返回指定索引区间元素
zrange key start stop 【withscores】

如果score相同,则按照字段序lexicographical order 排序

默认按照score从小到大,如果需要score从大到小排列,使用zrevrange

例如:

​    zrange key 0 2
返回指定分值区间元素(从小到大)
zrangebyscore key min max 【withscores】【limit offset count】

返回score默认属于【min,max】之间,元素按照score 升序排列,

limit中offset代表跳过多少个元素,count是返回几个。类似mysql

使用小括号,修改区间为开区间。例如(5,(10,5))

-inf和+inf表示负无穷和正无穷

例如:

​    zrangebyscore key 4 7

​    zrangebyscore key -inf +inf

返回指定分值区间元素(从大到小)

zrevrangebyscore key min max 【withscores】【limit offset count】

返回score默认属于【min,max】之间,元素按照score 升序排列,

limit中offset代表跳过多少个元素,count是返回几个。类似mysql

使用小括号,修改区间为开区间。例如(5,(10,5))

-inf和+inf表示负无穷和正无穷

例如:

zrevrangebyscore key 7 4

zrangebyscore key +inf -inf
移除指定排名范围的元素
zremrangebyrank key start stop

例如:

  zremrangebyrank key 0 2
查询数据

zrange key start drop

什么是持久化
将数据从容易丢失的内存放到能够永久存储的设备上

Redis为什么需要持久化

Redis持久化方式

RDB(Redis DB)

AOF(AppendOnlyFile)
RDB
在默认情况下,Redis将数据库快照保存在名字为dump.rdb的二进制文件中

策略

自动:按照配置文件中的条件满足就执行BGSAVE

save 60 10000,Redis要满足在60秒内至少有10000个间被改动,会自动保存一次

手动:客户端发起SAVE,BGSAVE命令

SAVE命令

  redis>save

   阻塞Redis服务,无法响应客户端请求

   创建新的dump.rdb替代旧文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YJUYqsoA-1639573471567)(E:\Type大数据笔记\图片\redis-save命令.jpg)]在这里插入图片描述

BGSAVE命令

  redis>bgsave

   非阻塞,redis服务正常接收处理客户端请求

​    Redis会folk()一个新的子进程来创建RDB文件,子进程处理完后会向父进程发送一个信号,

​    通知它处理完毕

​    父进程用新的dump.rdb替代旧文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hNOthc9t-1639573471569)(E:\Type大数据笔记\图片\redis-bgsava命令.jpg)]在这里插入图片描述

SAVE和BGSAVE命令

​    save不用创建新的进程,速度略快

​     bgsave需要创建子进程,消耗额外的内存

​     save适合停机维护,服务低谷时段

​     bgsava适合线上执行

Redis持久化-RDB
自动执行
   本质上就是bgsave
   默认配置
   save 900 1
   save 300 10
   save 60 10000
   dbfilename dump.rdb
   dir/vas/lib/6379
   只要三个条件满足一个,就自动备份(900 1 代表(改动一个文件,900秒后备份,备份后清零))
   创建rdb文件之后,时间计数器和次数计算器会清零
redis持久化-RDB

优点

   完全备份,不同时间的数据集备份可以做到多版本恢复

​    紧凑的单一文件,方便网络传输,适合灾难恢复

​    恢复大数据集速度较AOF快

缺点  

​    会丢失最近写入,修改的而未能持久化的数据

​    folk过程非常耗时,会造成毫秒级不能响应客户端请求
Redis持久化-AOF
AOF
   append only file ,采用追加的方式保存

​    默认文件appendonly.aof

​    记录所有的写操作命令,在服务启动的时候使用这些命令就可以还原数据库

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k5Kfx8uo-1639573471569)(E:\Type大数据笔记\图片\redis-aof.jpg)]

调整AOF持久化策略,可以在服务出现故障时,不丢失任何数据,也可以丢失一秒的数据

​    ,相对RDB损失小得多
AOF写入机制
AOF方式不能保证绝对不丢失

 目前常见的操作系统中,执行系统调用write函数,将一些内容写入到某个文件里面时,为了提高效率,

 系统通常不会直接将内容写入硬盘里面,而是先将内容放入一个内存缓冲区(buffer)里面,等到缓冲区被填 满,

 或者用户执行fsync调用fdatasync调用时才能将储存在缓冲区里的内容真正的写入到硬盘里,未写入磁盘之前,数据   可能会丢失
写入磁盘的策略
        appendfsync选项,这个选项的值可以是always,everysec或者no

alway:服务器每写入一个命令,就调用一次fdatasync,将缓冲区里面的命令写入到硬盘,这种模式下服务器出现故障,也不会丢失任何成功执行的命令数据

​         everysec(默认):服务器每一秒重调用一次fdatasync,将缓冲区里面的命令写入到硬盘,这种模式下,

服务器出现故障,最多只丢失一秒的执行的命令数据

​        no:服务器不主动调用fdatasync,由操作系统决定何时将缓冲区里面的命令写入到硬盘,这种模式下,服务器遭遇意外停机时,丢失的命令数量时不确定的

​        运行速度:always的速度慢,everysec和no都很快
AOF重写机制
    AOF文件过大

​     合并重复的操作,AOF会使用尽可能少的命令来记录
重写过程
   folk一个子进程负责重写AOF文件

​        子进程会开辟一个内存缓冲区接收新的写命令

​         子进程重写完成后,父进程会获得一个信号,将父进程接收到新的写操作由子进程写入到临时文件中

​     新文件替代旧文件

注:如果写入操作的时候出现故障导致命令写半截。可以使用redis-check-aof工具修复

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q4cH2CrK-1639573471570)(E:\Type大数据笔记\图片\redis-aof-重写机制.jpg)]

AOF重写触发
 手动:客户端向服务器发送bgwriteaof命令

​ 自动:配置文件中的选项,自动执行bgewriteaof命令
​    auto-aof-rewrite-min-size<size>,触发AOF重写所需的最小体积:只要在AOF文件的体积大于                等于size时,才会考虑是否需要进行AOF重写,这个选项用于避免对体积过小的AOF文件进行重写
  auto-aof-rewrite-percentage<percent>,指定触发重写所需的AOF文件体积百分比:当AOF文件的体积大于auto-aof-rewrite-min-size指定的体积,并且超过上一次重写之后的AOF文件体积的percent%时,就会触发AOF重写。(如果服务器刚启动不久,还没有进行过AOF重写,那么使用服务器启动时载入的AOF文件的体积来作为基准值)。将这个值设置为0表示关闭自动AOF重写  
AOF重写配置举例
auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size  64mb

当AOF文件大于64mb时候,可以考虑重写aof文件

appendonly yes

默认关闭,请开启  
优点
 写入机制,默认fysnc每秒执行,性能很好不阻塞服务,最多丢失一秒的数据

​       重写机制,优化AOF文件

​       如果误操作了(flushall等),只要AOF未被重写,停止服务移除AOF文件尾部

​       flushall命令,重启redis,可以将数据恢复到flushall执行之前的状态
缺点
   相同数据集,aof文件体积较rdb大了很多

​        恢复数据库速度叫rdb慢
REDIS集群
集群分类

​     主从复制 Replication

​      集群   cluster
主从复制Replication
 一个redis服务可以有多个该服务的复制品,这个redis服务称为master,其他复制品称为slaves

​     只要网络连接正常,master会一直将自己的数据更新同步给slaves,保持主从同步

​     只有master可以执行写命令,slaves只能执行读命令

在已启动成功之后也可以将主改成从

  slaveof master 6379

   从改成主  --数据不会删除

​    slaveof   no  one
启动六台redis集群(这是我自己虚拟机配置的)
1.在master中执行

​    cd /usr/local/soft/redis-cluster/7000/bin  ./redis-server redis.conf
​    cd /usr/local/soft/redis-cluster/7001/bin  ./redis-server redis.conf

2.在node1中执行

​     cd /usr/local/soft/redis-cluster/7002/bin  ./redis-server redis.conf
​     cd /usr/local/soft/redis-cluster/7003/bin  ./redis-server redis.conf

3.在node2中执行

​    cd /usr/local/soft/redis-cluster/7004/bin  ./redis-server redis.conf
​     cd /usr/local/soft/redis-cluster/7005/bin  ./redis-server redis.conf

redis-trib create --replicas 1 192.168.186.130:7000 192.168.186.130:7001 192.1
68.186.131:7002 192.168.186.131:7003 192.168.186.132:7004 192.168.186.132:7005
客户端访问redis集群
 -p 端口号    -h  节点ip  -c  自动重定向

  redis-cli -p 7000 -h 192.168.186.130 -c
查看集群信息
cluster info
查看节点信息
cluster nodes
Redis集群分片
    集群将整个数据库分为16384个槽位slot中的一个,key的槽位计算公式为slot_number=crc16(key)%16384,其中crc16位的循环冗余校验和函数

​    集群中的每个主节点都可以处理0个至16383个槽,当16383个槽都有某个节点在负责处理时,集群进入上线状态,并开始处理客户端发送的数据命令请求

举例

   三个主节点7000,7001,7002平均分片16383个slot槽位

​    节点7000指派的槽位为0到5460

​    节点7001指派的槽位为5461到10922

​     节点7002指派的槽位为10923到16383
Redis集群总结
redis集群是一个由多个节点组成的分布式集群,它具有复制丶高可用丶和分片特性

​       redis的集群没有中心节点,并且带有复制和故障转移特性,这可用避免单个节点成为性能瓶颈,

​       或者因为某个节点下线而导致整个集群下线

​        集群中的主节点负责处理槽(存储数据),从而节点则是主节点的复制品

​        redis集群将整个数据库分为16384个槽,数据库中的每个键都属于16384个槽中的其中一个

​        集群中的每个主节点都可以负责0个至16384个槽,当16384个槽都有节点在负责时,集群进入上线状态

​         ,可以执行客户端发送的数据命令

​        主节点只会执行和自己负责的槽有关的命令,当节点接收到不属于自己处理的槽命令时,它将会处理指定槽

​       的节点的地址返回给客户端,而客户端会向正确的节点重新发送
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值