Redis

Redis

Redis

  • Redis是一种数据库。能够存储数据、管理数据的一种软件。

数据库应用的发展历程

  • 单机数据库时代
  • 缓存、水平切分时代
  • 读写分离时代
  • 分表分库时代(集群)
  • 关系型数据库:Oracle。mysql。DB2、sqlservcer、…
  • 非关系型数据库:彻底改变了底层存储机制。不再采用关系数据模式,而是采用聚合数据结构存储数据。
    • redis、mongDB、HBase、…
  • Redis是一个用C语言编写、开源的、基于内存运行亦可持久化的、高性能的NoSql数据库,也是当前热门的NoSql数据库之一。
    • Redis采用的是K-V模型存储数据。
    • Redis中的数据大部分时间都是存储内存中的,适合存储频繁访问、数据量比较小的数据。

Redis的特点

  • 支持数据持久化
  • 支持多种数据结构
  • 支持数据备份
  • 安装redis:参考安装手册。

启动Redis服务

1)前台启动:在任何目录下执行 redis-server

2)后台启动:在任何目录下执行redis-server &

3)启动redis服务时,指定配置文件:redis-server redis.conf &

关闭Redis服务

1)通过kill命令:ps -ef|grep redis 查看pid kill -9 pid

2)通过redis-cli shutdown 命令关闭

Redis客户端

  • 用来连接redis服务,向redis服务器发送命令,并且显示redis服务处理结果
    • redis-cli:redis自带客户端,使用命令redis-cli就可以启动redis的客户端处理
    • redis-cli:默认连接127.0.0.1(本机)的6379端口上的redis服务。
    • redis-cli -p 端口号:连接127.0.0.1的指定端口上的redis服务。
    • redis-cli -h IP地址 -p 端口:连接指定ip主机上的指定端口的redis服务。

退出客户端

  • 在客户端执行命令:exit或者quit。

Redis基本知识

  • 测试redis服务的性能
    • redis-benchmark
  • 查看redis服务是否正常运行
    • ping 如果正常–pong
  • 关闭防火墙
    • systemctl stop firewalld
  • 查看redis服务器的统计信息
    • info 查看redis服务的所有统计信息
    • info [信息端] 查看redis服务器的指定的统计信息,如:info Replication
  • redis的数据库实例
    • 作用类似于mysql的数据库实例,redis的数据库实例只能由redis服务来创建和维护,开发人员不能修改和自行创建数据库实例;默认情况下,redis会自动创建16个数据库实例,并且给这些数据库进行编号,从0开始,一直到15,使用时通过编号来使用数据库;可以通过配置文件,指定redis自动创建的数据库个数;redis的每一个数据库本身占用的存储空间是很少的,所以也不会造成存储空间的太多浪费
    • 默认情况下,数据库连接的的是编号是0的数据库实例;可以使用select index切换数据库实例
  • 查看当前数据库实例中所有key的数量:dbsize
  • 查看当前数据库实例中所有的key:keys *
  • 清空数据库实例:flushdb
  • 清空所有数据库实例:flushall
  • 查看redis中的所有配置信息:config get *

Redis的五种数据结构

  • 程序是用来处理数据的,redis是用来存储数据的。程序处理完的数据要存储到redis数据库,不同特点的数据要存储在redis中不同类型的数据结构中。
    • java redis
    • 字符串 string:单key:单value
    • list列表 list:单key:多有序value
    • set集合 set:单key:多无序value
    • pojo hash:单key:对象(属性:值)
    • ​ zset:单key:多有序value

Redis中的操作命令

  • redis中有关key的操作命令
    • 查看数据中的key
      • keys pattern
      • ​ |->* :匹配0或者多个字符
      • ​ |->?:匹配一个字符
      • ​ |->[]:匹配[]中的一个字符
      • keys * :查看数据库中所有的key
      • keys k*:查看数据库中所有以k开头的key
      • keys h*o
      • keys h?o
      • keys h[abc]llo
    • 判断key在数据库中是否存在
      • exist key 如果存在,则返回1;不存在返回0
      • exist key [key key…]返回值是存在的key的数量
    • 移动指定的key到指定的数据库实例
      • move key index
    • 查看指定key的剩余时间
      • ​ |->如果key没有设置生存时间,返回-1
      • ttl |->如果key不存在,返回-2
    • 设置key的最大生存时间:expire key seconds
    • 查看指定key的数据类型:type key
    • 重命名key:rename key newkey
    • 删除key:del key[key key…] 删除指定的key,返回值是实际删除的key的数量
  • redis中有关string类型数据的操作命令
    • 将string类型的数据设置到redis中
      • set 键 值
    • 从redis中获取string类型的数据
      • get 键
    • 追加字符串
      • append key value
      • |->返回追加之后的字符串长度
      • |->如果key不存在,则重新创建一个key,并且把value值设为value
    • 获取字符串数据的长度
      • strlen key
    • 将字符串数值进行加1运算
      • incr key
      • |->返回加1运算之后的数据
      • |->如果key不存在,首先设置一个key,值初始化为0,然后进行incr运算
      • |->要求key所表示的value必须是数值,否则报错
    • 将字符串数值进行减1运算
      • decr key
    • 将字符串数值进行加offset运算
      • incrby key offset
    • 将字符串数值进行减offset运算
      • decrby key offset
    • 获取字符串中的子字符串
      • getrange key startIndex endIndex
    • 用value覆盖从下标为setrange开始的字符串,能覆盖几个字符就覆盖几个字符
      • setrange key startIndex value
    • 设置字符串数据的同时,设置它的最大生命周期
      • serex key seconds value
    • 设置string类型的数据value到redis数据库中,当key不存在时设置成功,否则,放弃设置
      • sexnx key value
    • 批量设置string类型的数据value到redis数据库中
      • mset 键1 值1 键2 值2…
    • 批量从redis中获取string类型的数据
      • mget 键1 键2 键3…
    • 批量设置string类型的数据value到redis数据库中,当所有key都不存在时,设置成功,否则,全部放弃设置
      • msetnx 键1 值1 键2 值2…
  • redis中有关list类型数据的操作命令
    • 将一个或者多个值依次插入到列表的表头(左侧)
      • lpush key value[value value value…]
    • 获取指定列表中指定下标区间的元素
      • lrange key startIndex endIndex
    • 将一个或者多个值依次插入到列表的表尾(右侧)
      • rpush key value[value value value…]
    • 从指定列表中移除并且返回表头元素
      • lpop key
    • 从指定列表中移除并且返回表尾元素
      • rpop key
    • 获取指定列表中指定下标的元素
      • lindex key index
    • 获取指定列表的长度
      • llen key
    • 根据count值移除指定列表中某一些(跟value相等)数据
      • lrem key count value
      • ​ |->count>0
        • 从列表左侧移除count个跟value相等的
      • ​ |->count<0
        • 从列表右侧移除count个跟value相等的
      • ​ |->count=0
        • 从列表中移除全部跟value相等的
  • redis中有关set类型数据的操作命令
    • 将一个或者多个元素添加到集合中,如果元素已经存在,则会忽略,返回成功加入的元素个数
      • sadd key value [value value value…]
    • 获取指定集合中所有的元素
      • smembers key
    • 判断指定元素在指定集合中是否存在
      • sismember key member
        • 存在返回1
        • 不存在返回0
    • 获取指定集合的长度
      • scard key
    • 移除指定集合中一个或者多个元素
      • srem key member[member member member…]
        • 不存在的元素忽略
        • 返回成功移除的个数
    • 随机获取指定集合中的一个元素
      • srandmember key [count]
      • ​ |->count>0:随机获取的多个元素不能重复
      • ​ |->count<0:随机获取的多个元素可能重复
    • 从指定集合中随机移除一个或者多个元素
      • spop key[count]
    • 将指定集合中的指定元素移动到另一个元素
      • smove source dest member
    • 返回一个集合中有而其他集合中都没有的元素组成新集合
      • sdiff key key[key key…]
    • 获取所有指定集合中都有的元素组成的新集合
      • sinter key key key[key key…]
    • 获取所有指定集合中所有的元素组成的新集合
      • sunion key key key[key key…]
  • redis中有关hash类型数据的操作命令
    • 将一个或者多个field-value对设置到哈希表中
      • hset key field1 value1[field2 value2…]
    • 获取指定哈希表中指定field值
      • hget key field
    • 批量将多个field-value对设置到哈希表中
      • hmset key field1 value1[field2 value2…]
      • redis4.0.0已弃用
    • 批量获取指定哈希表中指定field值
      • hmget key field1[field2…]
    • 获取指定哈希表中的所有field和value
      • hgetall key
    • 获取指定哈希表中删除一个或者多个field
      • hdel key field1[field2…]
    • 获取指定哈希表中的所有field个数
      • hlen key
    • 判断获取指定哈希表中是否存在某一个field
      • hexists key field
    • 获取指定哈希表中的所有field列表
      • hkeys key
    • 获取指定哈希表中的所有value列表
      • hvals key
    • 对指定哈希表中指定field值进行整数加法运算
      • hincrby key field int
    • 对指定哈希表中指定field值进行浮点数加法运算
      • hincrbyfloat key field float
    • 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在的时候才设置,否则不设置。
      • hsetnx key field value
  • redis中有关zset类型数据的操作命令
    • 将一个或者多个member及其score值加入有序集合
      • zadd key score member
    • 获取指定有序集合中指定下标区间的元素
      • zrange key startIndex endIndex [withscores]
    • 获取指定有序集合中指定分数区间的元素
      • zrangebyscore key min max [withscores]
    • 删除指定有序集合中一个或者多个元素
      • zrem key member[member…]
    • 获取指定有序集合中所有元素个数
      • zcard key
    • 获取指定有序集合中指定分数区间元素个数
      • zcount key min max
    • 获取指定有序集合中指定的元素的排名
      • zrank key member
    • 获取指定有序集合中指定的元素的分数
      • zscore key member
    • 获取指定有序集合中指定的元素的排名(倒序)
      • zrevrank key member

小结

redis的配置文件

  • 在redis根目录下提供redis.conf配置文件
    • 可以配置一些redis服务端运行时的一些参数
    • 如果不使用配置文件,那么redis会按照默认的参数运行
    • 如果使用配置文件,在启动redis服务时必须指定所使用的配置文件
  • redis配置文件中关于网络的配置:
    • port:端口号,默认6379
    • bind:连接时使用的ip地址,默认可以使用redis服务所在主机上任何一个ip都可以;一般情况下,都会配置一个ip,而且通常是一个真实的ip
  • 常规配置
    • loglevel:配置日志级别,开发阶段配置debug
    • logfile:指定日志文件
      • 默认情况下,会将日志信息输出到控制台,可以通过使用logfile配置日志文件,使redis把日志信息输出到指定文件中。
    • databases:配置redis服务默认创建的数据库实例个数,默认值16。
  • 安全配置
    • requirepass
      • 配置Redis的访问密码。默认不配置密码。
      • 需在protect-mode=no时起作用
      • 登录客户端
        • redis -cli -h ip -p 6379 -a pwd

Redis持久化

RDB策略

  • 在指定时间间隔内,redis服务执行指定次数的写操作,会自动触发一次持久化操作
    • 默认的持久化策略
    • save :配置持久化策略
    • dbfilename:配置redis RDB持久化数据存储的文件
    • dir:配置redis RDB持久化文件所在目录

AOF策略

  • 采用操作日志来记录进行每一次写操作,每次redis服务启动时,都会重新操作一遍日志中的命令。
    • 效率低下。
  • appendonly:配置是否开启AOF策略
  • appendfilename:配置操作日志文件

小结

  • 根据数据的特点决定开启那种持久化策略
    • 一般情况下,开启RDB足够了

Redis事务

  • 允许把一组redis命令放在一起进行序列化,然后一起执行,保证部分原子性
  • multi
    • 用来标记一个事务开始
  • exec
    • 执行事务队列所有命令
  • 如果一组命令中,在压入队列过程中正常,但是在执行事务队列命令时发生了错误,则只会影响发生错误的命令,不会影响其他命令的执行,不能够保证事务的原子性
  • discard
    • 清除所有已经压入队列的命令,并且结束整个事务
  • watch
    • 监控某一个键,当事务在执行过程中,此键代码的值发生变化,则本事务放弃执行,否则,正常执行
  • unwatch
    • 放弃监控所有的键

Redis消息的发布与订阅(了解 100%不用 后续使用RabbitMQ等中间件)

  • redis客户端订阅频道:消息的发布者往频道上发布消息,所有订阅此频道的客户端都能够接受到消息
  • subscribe
    • 订阅一个或者多个频道的消息
  • publish
    • 将消息发布到指定频道
  • psubcribe
    • 订阅一个或者多个频道的消息,频道名支持通配符

Redis的主从复制

  • 主少从多、主写从读、读写分离、主写同步复制到从
  • info replication
    • 默认情况下,所有的redis服务都是主机,即都能写和读,但是都还没有从机。
  • 设置主从关系,设从不设主
  • 从机设置:slaveof ip 端口号
  • 全量复制:一旦主从关系确定,会自动把主机上已有的数据同步复制到从库
  • 增量复制:主机写数据会自动同步到从库
  • 主写从读,读写分离
    • 从机写数据报错
  • 主机宕机
    • 从机等待
  • 主机恢复
    • 一切恢复正常
  • 从机宕机
    • 主机少一个从机,其他不变
  • 从机恢复
    • 需要重新设置主从关系
    • 否则翻身做龙王,成为大哥(master)
  • 从机上位
    • 主机宕机、从机等待
    • 从机断开原来主从关系(slaveof no one)
    • 重新设着主从关系
    • 主机恢复、成为空头司令
    • 天堂变地狱
  • 小结:一台主机配置多台从机,一台从机又可以配置多台从机,从而形成一个庞大的集群结构。减轻一台主机的压力,但是增加了服务间的延迟时间

哨兵模式

  • 主机宕机、从机上位的自动版
  • 提供哨兵配置文件
    • 在redis安装目录下创建配置文件:redis_sentinel.conf
      • sentinel monitor dc-redis(哨兵名字) ip port 1
        • 指定监控主机ip地址,port端口,得到哨兵的投票数(当哨兵投票数大于或者等于此数时切换主从关系)
  • 启动哨兵服务
    • redis-sentinel redis_sentinel.conf
  • 主机宕机
    • 哨兵程序自动选择从机上位
  • 主机恢复
    • 自动从属于新的主机

缺点

  • Redis主从复制缺点就是延迟

Jedis操作Redis

  • IDE使用jedis包

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值