redis介绍

Redis、Mamcache/MongoDB对比

分布式数据库的CAP原理

redis的下载安装

安装之后的操作

vim /opt/redis-5.0.4/redis.conf
#搜索daem
将daemonize no 改为 daemonize yes 
#修改启动文件进入 /user/local/bin 目录下,执行
redis -sever /opt//redis-5.0.4/redis.conf
#其他操作
redis -cil shutdown #单实例关闭数据库
redis -cil -p 6379 shutdown #多实例关闭数据库
netstat -lntpgrep 6379 #常用操作检测6379端口是否监听
ps -efgrep redis  #检测后台程序是否存在
redis -cil #链接redis ,在/user/local/bin 目录
ping # 输入ping返回pong说明交互是成功的
set k1 china #键值对的形式,存储数据
get k1 #使用ger获得数据
redis-benchmart #测试redis性能,crtl+c,执行退出redis,最好执行5s就关闭,在linux执行此命令
dbsize # 查看数据库键的数量
flushdb #清空当前数据库
flushall # 清空所有数据库(16个都清空,慎用)
select index #切换数据库index范围是0-15,可用tab键补齐

在这里插入图片描述
在这里插入图片描述

key操作

exists key #判断某个key是否存在tab键会自动补全),返回1说明在,返回0 说明不在move key db #移动剪切粘贴)键到几号库
ttl key #查看键还有多久过期(-1,永不过期,-1,已过期
time to live #还能活多久
expire key #为键设置过期时间
type key #查看键的数据类型

在这里插入图片描述
在这里插入图片描述

数据类型

字符串命令 string

set  key value #向key中存数据value,如果key已存在,新输入value覆盖原数据
get key #根据key取数据
del key #删除key数据
append key value #向key中追加value数据
strlen key #获得key的长度
# ----------------加减操作,操作的必须是数字类型------------
incr key #给key+1
decr key #给key-1
incrby key num # 给key+num
decrby key num # 给key-num
#----------------类似于between……and---------
getrange key index1 index2 #获取index1和index2范围内的数据(左右皆包括)
setrange key insex value#向key的insex位置插入value
#----------------添加数据同时判断---------
set key n value #给key添加value的同时设置n秒的生命周期
setnx key value # 添加判断key对应是否有值,有的话添加失败
#------------------其他方式添加获取----------------------
mset key1 value1 key2 value2 #一次添加多组数据
mget key1 key2 #一次获取很多数据
msetnx key1 value1 key2 value2 #添加时,一次判断多个key是否存在,只要有一个存在,就添加失败
getset key value # 添加的时候返回key原本对应的值,然后再将新值写入

在这里插入图片描述
在这里插入图片描述

列表 list

  • 正序:从上至下,从左至右,倒序:从下至上,从右至左
# ----------------给列表添加元素------------
lpush key list_value #向key中添加列表元素value,元素之间使用空格隔开,正序添加
rpush key list_value # 向key中添加列表元素value,元素之间使用空格隔开,倒序添加
lrange key 开始索引 结束索引 # 查看key列表指定索引下的元素,-1表示到结尾,一般从0号索引开始
# ----------------移除元素------------
lpop key # 正序移除key列表中的第一个元素
rpop key # 倒序移除key列表中的第一个元素
lrem key  count value # 删除key中的count个value,返回信息为删除个数
# ----------------下标查询和返回长度------------
lindex # 获取key列表中,第index个元素,正序查找
llen key # 获取指定元素的长度
ltrim key index1 index2 # 获得两个索引之间的数据,删除其他的元素,正序获得
# ----------------修改链接插入------------
rpoplpush key1 key2  # 将元素从key1中取出交给key2,左出右进§
lset key index value  #在key列表,index的位置插入x
linsert key before/after index value 
# 在key列表的index后/前,插入value

在这里插入图片描述
在这里插入图片描述

集合set

#-----------------添加/查看/判断------------
sadd key value #向set key中添加value,value重复时只添加一
smembers key #查看set key中的数据
sismeber key value # 查看set key中是否存在value
#-----------------获得/删除/移除------------
scard key #查看set key中元素的个数
srem key value # 删除set key中,value这个元素
srandmember count # 从set key中随机获得count个元素
spop key # 随机移除set key中的元素
smove key1 key2 value # 随机从set key1中移动一个value到key2
#---------------数学集合类-----------------
sinter key1 key2 #查看set key1和key2的交集
sunion key1 key2#查看set key1和key2的并集
sdiff key1 key2#查看set key1中存在,key2中不存在的数据

在这里插入图片描述

哈希hash

#-------------操作元素属性--------------
hset key hkey hvalue # 向哈希key中,添加hkeyhvalue的键值
hget key hkey #获取哈希key中,hkey的value
hmset key hkey1 hvalue1 hkey2 hvalue2……
# 向哈希key中,添加hkey:hvalue,hkey2:hvalue2的多个键值
hmget key hkey1 hkey2#获取哈希key中,hkey1、hkey2的value
hgetall key # 获取哈希 key下面所有键的值
hdel key hkey# 删除哈希 key下面hkey的键值
#----------获得/自增/哦安段-------------
hlen key # 获取哈希key中,元素的数量
hexists key hkey # 判断哈希key中,hkey的元素是否存在
hkeys key # 获取哈希key中所有的元素的键(k)
hvals key #获取哈希key中,所有元素的值(v)
hincrby key hkey int
# 向哈希 key的hkey对应的值中,增加int,hkey对应的值必须是数字,返回增加后的数字
hincrbyfloat key hkey float # 向哈希 key的hkey对应的值中,增加float,hkey对应的值必须是数字,返回增加后的数字
hsetnx key hkey value # 判断哈希key中,hkey对应的元素是不是value
#在redis中输入汉字时,显示时会转换unicode

在这里插入图片描述

Zset 有序集合

#--------------------添加、查询和删除------------------
zadd key v1 c1 v2 c3…… #向有序集合key中,添加v,v2等多个元素,其对应的分数是c1和c2
zrange key index1 index2 
# 查询有序集合key中,index1和index2之间的元素,0,-1表示全部,返回所有的元素,不返回分数
zrange key index1 index2 withscores
# 查询有序集合key中,index1和index2之间的元素,0,-1表示全部,返回所有的元素和分数
zrangebyscore key v1 v2 
# 查询有序集合key中,分数1和分数2之间的元素(包含v1和v2)
zrangebyscore key v1 (v2 
# 查询有序集合key中,分数v1和分数v2之间的元素(不包含v2)
zrangebyscore key (v1 (v2 
# 查询有序集合key中,分数v1和分数v2之间的元素(不包含v1、v2)
zrangebyscore key v1 v2 limit index count
# 从有序集合key中,分数v1和分数v2之间,跳过2个元素,再取两个元素
zrem key v1 # 在有序集合key中,删除v1的元素                     
#-------------------范围逆序----------------------
zcard key # 查看有序集合key中元素个数
zcount key c1 c2 # 查看有序集合key中,分数在c1和c2之间有多少个元素
zrank  key v1 # 查看有序集合key中,v1的下标下标是从0开始),从上到下,从左至右
zscore key v1 # 获取有序集合key中,v1对应的分数
zrevrank key v1 #获取有序集合key中,v1对应的逆序下标,从下到上,从右至左
zrevrange key  index1 index2 # 逆序查询有序集合key中,index1和index2之间元素
zrevrangebyscore key c2 c1# 逆序查询有序集合key中,分数大于c1小于c2的元素

在这里插入图片描述

持久

RDB相关的配置

AOF相关的配置

开启AOF

# 在配置文件中,使用/appendonly搜索
appendonly yes
appendfilename appendonly.aof

共存

AOF 相关的配置

总结

事务

定义和执行

事务的监控watch

  • 语法结构watch key,key为输入数据的时候,设置的键
  • 补充:unwatch,取消watch命令对所有key的操作,需要exec之前执行
    • 因为一旦执行了exec或者DISCARD命令,之前添加的监控就会失效
  • 在执行事务之前,使用并发的方式修改监控in的数据(另外一个窗口,也可以理解为线程
  • 再去执行事务的时候,会打断事务的执行,导致执行失败
  • 整个过程相当于乐观锁,
    • 多线程操作数据的时候,在事务提交时,如果watch监控的多个KEY中任何KEY的值已经被其他客户更改,则使用EXEC执行事务时,事务队列将不会被执行

事务的订阅

主从复制

一主二仆

vim  /opt/redis-5.0.4/redis.conf
#然后搜索bind
/bind
#修改服务器地址为0.0.0.0,如下图

在这里插入图片描述

  • 2.启动三台redis,并查看每台机器的角色,都是master
  • 3.测试开始
    • 一台机器再添加值,例如:mset k1 v1 k2 v2
  • 命令示例图如下:
    在这里插入图片描述
  • 复制数据之后,主机和从机再次查看角色时,他的信息如下:
    在这里插入图片描述
  • 复制之后:
    • 从机可自动从主机中复制主机中获取复制之前存储的数据
    • 主机存储数据之后,从机也可立刻同步
    • 主机shutdown,从机仍是slave且可使用,但是查看角色的时候,显示主机下线
    • 从机死了,主机仍是master,小弟少了一个
    • 从机死了之后归来,主机和没有问题的从机没有变化,但归来的从机会自立门户,其身份变成了master,不和原来的集群在一起

主机的血脉相传

  • 一个主机里淋上可以有多个从几,但是这样的话,主机会很累
  • 我们可以使用java面向对象继承中的传递性来解决这个问题,减轻主机的负担
  • 我们可以将其他的redis服务器加在从机上,形成树形结构,他就会复制从机的数据
  • 例如下图
    在这里插入图片描述
  • 关联之后,主机输入数据,从机1复制主机的数据,从机2复制从机1的数据

谋权篡位

  • 1个主机,2个主机的跟随从机,如果主机挂掉了;
    • 只能从从机中选择一个当主机,剩余的从机跟随新主机
  • 手动将从机变为主机 slaveof no one
    • 手动将另外一台主机的跟随变为新主机
      在这里插入图片描述
  • 如果原本的主机重新启动,那么原本挂掉的主机就没有小弟了,只是身份是主机而已

redis复制的原理

哨兵模式

#sentinel monitor 被监控主机名(自定义ip 端口号 票数
sentinel monitor redis141 192.168.204.141 6479  1 
# 讲着计划写入sentinel.conf文件中即可

在这里插入图片描述

    • 启动服务的顺序 主redis ——从redis ——Sentinel1/2/3
    • 启动命令是:redis- sentinel sentinel.conf
  • 主机shutdown,从机进行激烈的投票
  • 查看最后权利的分配
    在这里插入图片描述
  • 如果之前挂掉的主机重启的话:
    • 过了几秒后,Sentinel会进行身份 转换,变为从机
  • 这种方式的缺点:
    • 由于所有的写操作都是在master上进行的
    • 当系统很繁忙的时候,延迟问题会加重
    • slave机器数量增加,问题也会加重

原文地址:https://blog.csdn.net/weixin_43754879/article/details/128664809

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_13945.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注