Redis入门

最新博客:https://codedog.link

课程介绍

NoSQL的概述

什么是NoSQL

  • NoSQL = Not Only SQL
  • 非关系型数据库

为什么需要NoSQL

  • High performance 高并发读写
  • Huge Storage 海量数据的高效率存储和访问
  • High Scalability &&High Availability 高可扩展性和高可用性

NoSQL数据库的四大分类

  • 键值存储
  • 列存储
  • 文档数据库(典型:mogonDB)
  • 图像数据库

NoSQL的特点

  • 易扩展
  • 灵活的数据模型
  • 大数据量,高性能
  • 高可用

Redis的概述

高性能键值对数据库,支持的键值数据类型:

  • 字符串类型
  • 列表类型
  • 有序集合类型
  • 散列类型
  • 集合类型

Redis的应用场景

  • 缓存
  • 任务队列
  • 网站访问统计
  • 数据过期处理
  • 应用排行榜
  • 分布式集群架构中的session分离

Redis的安装和使用

环境:

  • VM+CentOS
  • 安装步骤:
    • 把下载的Redis上传到root目录下,解压,进入解压的目录 使用make命令编译
    • 编译完成后使用 make PREFIX=/usr/local/redis install 进行安装,Redis安装到/usr/local/redis
    • 打开redis目录下是Bin目录,bin目录下有如下可运行脚本
    • Benchmark:性能测试工具、check-aof:aof文件修复工具、

      check-dump:IDB检查、check-cli:命令行客户端、check-server:Redis服务启动

  • 启动方式:

    进入bin目录使用命令"./redis-server"进行启动,默认的启动方式是前台启动,启动后命令行无法再进行其他操作,需要修改redis.conf文件,进入解压目录将redis.conf文件拷贝到安装目录,如下图修改文件中的no为yes

    修改完成后使用命令./redis-server ./usr/local/redis/redis.conf 启动(意思是使用conf文件启动)

    启动完成后可以使用命令ps -ef | grep -i redis查看

    可以使用kill -9 + 2669的方式关闭线程

    或者使用 redis-cli shutdown停止服务

  • 如何使用:
    • 使用./bin/redis-cli命令启动客户端(即连接数据库)
    • 可以使用命令Ping测试连接,返回PONG表示连接没有问题
    • 使用set存数据
    • 使用get取数据
    • 使用del删除数据
    • 使用keys * 查看所有的key

Jedis的入门

  • Jedis介绍:
    • Redis不仅使用命令操作,主流的开发语言都支持客户端的操作,Jedis是Redis官网首选的Java客户端开发包
  • 使用:
    • 首先下载JedisJar包和依赖包
    • 设置连接的IP和端口号
    • 打开Linux防火墙设置(此步不做可能会导致运行时报连接超时错误)

      firewall-cmd --zone=public --add-port=6379/tcp --permanent

      重启防火墙

      systemctl restart firewalld.service

    • 同时需要注释掉redis.conf中的bind 127.0.0.1,和把protected-mode设为no

    • 单实例测试:

    • l连接池方式连接

Redis的数据类型

  • 五中数据类型
    • 字符串(String)
    • 字符串列表(list)
    • 有序字符串集合(sorted set)
    • 哈希(hash)
    • 字符串集合(set)
  • Key定义的注意点
    • 不要过长(1024字节,占用内存)
    • 不要过短(降低可读性)
    • 统一命名规范
  • 存储String
    • 二进制安全的,存入和获取的数据相同
    • Value最多可以容纳的数据长度是512M
    • 存储String常用命令
      • 赋值
        • Set key value 存一个键值对
      • 取值
        • Get key 获取key对应的值
        • Getset key value 先获取key的值,再把key的值设置成value
      • 删除
        • Del key 删除对应key和值
      • 扩展命令
        • Incrby key 将指定Key的value增加指定数字,如果key不存在,将值设置为0并加指定数字,如果value不能转成数字,那么操作会失败,并返回相应的错误信息
        • decrby key 将指定Key的value减少指定数字,如果key不存在,将值设置为0并减少指定数字,如果value不能转成数字,那么操作会失败,并返回相应的错误信息
        • append key value 在指定Keyvalue后面追加value字符串,返回的是字符串的长度,如果key不存在,将值设置为指定字符串
      • 数值增减
        • Incr key 将指定key的value增加1 如果key不存在,将值设置为0并加1,如果value不能转成数字,那么操作会失败,并返回相应的错误信息
        • Decr key 将指定key的value减1 如果key不存在,将值设置为0并减1,如果value不能转成数字,那么操作会失败,并返回相应的错误信息
  • 存储Hash
    • String Key和String Value的map容器
    • 每个Hash可以存储4294967295个键值对(42亿)
    • 存储Hash常用命令
      • 赋值
        • hset key field value
          • :hset myhash username jack
        • Hmset
          • : hmset myhash2 username rose age 21
      • 删除
        • Hdel key field1 field2(删除对应对象的多个属性,删除以后再次删除会返回0)
        • Del key (删除整个对象)

   

   

  • 取值
    • Hget key field(要取的对象 对象的属性)
    • Hmget key field field..(要取的对象,属性1,属性2.。。)
    • Hgetall key(取得对应key的所有属性)
  • 增加数字
    • Hincrby key field value
  • 自学命令
    • Hexists key field(判断指定key中的属性是否存在存在返回1,不存在返回0)
    • Hlen key (得到key中有几个属性)
    • Hkeys key(得到key中所有的属性的名称)
    • Hvals key(得到key中所有属性的值)
  • 存储list
    • redislist类型是按照插入顺序排序的字符串链表,和数据结构中的普通链表一致
    • ArrayList使用数组方式存储数据(查询较快,新增和删除较慢)
    • LinkList使用双向链表方式存储数据(插入和删除速度较快)
    • 双向链表中增加数据
    • 双向链表中删除数据
    • 存储list常用命令:
      • 两端添加
        • (从左侧增加值)Lpush key value1 value2
        • (从右侧增加值)rpush key value1 value2
      • 查看列表
        • Lrange key start stop(开始下标,结束下标 注意负数)
      • 两端弹出
        • Lpop key (弹出指定key中头部的元素)
        • Rpop key(弹出指定key中尾部的元素)
      • 获取列表元素个数
        • Len key
      • 扩展命令
        • Lpushx key (当指定的key存在时候,则可以向这个Key的头部插入一个指定的值)
        • Rpushx key (当指定的key存在时候,则可以向这个Key的尾部插入一个指定的值)
        • Lrem key count value (count:要删除几个指定的值,value:指定要删的值,如下图,从头到尾删除两个3)
        • 从尾部往头部删除两个1
        • 删除key里面所有的2
        • 修改指定下标的value
        • 在某一个元素前插入一个元素
        • 在某一个元素之后插入一个元素
        • 将链表中的尾部元素弹出,并添加到另一个链表的头部
  • 存储Set
    • 和List不同,set集合中不允许出现重复的元素
    • 每个Set可包含的最大元素数量是4294967295
    • 常用命令
      • 添加/删除元素
        • Sadd key value1 value2 添加

             

        • Srem key value1 value2删除
      • 获得集合中的元素
        • Smembers key

   

   

   

  • 集合中的差集运算
    • Sdiff key1 key2

   

   

  • 集合中的交集运算
    • Sinter key1 key2
  • 集合中的并集运算
    • Sunion key1 key2
  • 扩展命令
    • Sismember key value判断set中有没有指定元素存在返回1,不存在返回0
    • Scard key获得set中成员的数量
    • Srandmember key随机返回set中的一个成员
    • Sdiffstore key v1 v2将两个集合v1 v2相差的成员存储到集合key中
    • Sinterstore key v1 v2求两个集合v1 v2的交集并存到一个集合key中
    • Sunionstore key v1 v2将两个集v1 v2的并集存到一个集合Key中
  • 存储sorted-sed
    • Sorted-set和set的区别
      • 添加元素
        • Zadd key 分数-value 如果value在集合中已经存在 则会使用新的分数替换旧的分数但是返回个数为0
      • 获得元素
        • 可以获得成员中的数量或者成员对应的分数
        • 获得分数:zscore
        • 获得 成员数量
      • 删除元素
        • Zrem key value
      • 范围查询
        • Zrange key starp stop
        • 显示分数(从小到大)
        • 从大到小
        • zremrangebyrank按照排名的范围删除
        • zremrangebyscore key min max按照分数范围删除
      • 扩展命令
        • ZRANGEbyscore key min max返回分数区间内的所有元素
        • Zincrby key value 元素 设置指定成员分数增加
        • Zcount key min max查看指定分数的元素有几个
  • 使用场景:
    • 大型在线游戏积分排行榜
    • 构建索引数据

Keys的通用操作

Keys * 查看所有的key

Keys my? 查看所有以my开头的key

Del key1 key2 key3 删除指定Key

Exists key 某一个Key是否存在 存在1 不存在0

Rename keyname newkeyname 给指定的key换名字

Expire key m 给指定key设置过期时间 单位s

Ttl key 查看key所剩超时时间

Type key 查看key类型

Flushall 清空数据库

Redis的特性

  • 多数据库
    • 一共有16个数据库从0-15 客户端默认连接0数据库
    • 可以通过select index 来选择连接数据库
  • Redis事务
    • Multi 开启一个事务
    • exec 提交
    • Discard 回滚

Redis的持久化

  • RDB方式
    • 在指定的时间间隔内,将内存中的数据集快照,写入到磁盘
    • 优势:
      • 整个redis数据库只包含一个文件,对于文件备份很友好
      • 对于灾难恢复,由于只有一个文件,可以很方便的压缩转移
      • 性能最大化,对比AOF,如果数据量很大,RDB的效率会更高
    • 劣势:
      • 如果想保证数据的高可用性,即最大限度避免数据丢失,RDB就不是一个好的选择,如果数据在持久化之前发生宕机,数据可能会丢失
      • 数据集非常大的情况下,由于是子线程进行操作,可能会导致服务器停止几百毫秒到一秒
      • 配置:
        • Redis.conf文件中如下的配置
        • 第一行指的是:900秒至少有一个Key发生变化,就会持久化一次
        • 第二行指的是:300秒至少有十个key发生变化,就会往硬盘上写一次
        • 第三行指的是:60秒至少有一万个Key发生变化,就会往硬盘上写一次
        • 默认保存的文件名:
        • 默认的保存路径
  • AOF方式
    • 将以日志的形式记录服务器的每一步操作,redis服务器启动之初,会读取该文件来重新构建数据库
    • 优势:
      • 可以带来更高的数据安全性
      • 提供三种策略:每秒同步(异步,效率高)、每修改同步(每次修改都会被立即记录,效率低,安全)、不同步
      • 对于日志使用的是追加模式,即使服务器宕机也不会破坏日志文件中存在的内容
      • 如果日志过大,redis可以启动自动重写机制
    • 劣势:
      • 对于相同数量的数据集,AOF文件要比RDB文件大
      • 效率上会低于RDB
    • 配置:
      • 默认aof方式没有打开 ,需要把上图的no改为yes,打开后默认文件名:
      • 同步方式:
posted @ 2017-09-17 17:11  LuBoom  阅读(412)  评论(0编辑  收藏  举报