08 - Redis的引入与使用

目录

1. Redis基本介绍
  • 数据库的发展

  • Redis介绍与安装

2. Redis的使用
  • Redis基本命令

  • Redis常用数据类型

*3. Redis主从配置

课堂笔记

1. Redis基本介绍
1.1 数据库的发展
  • 单实例数据库:主要在互联网+大数据来临前,一些企业内部使用单实例数据库就能满足系统要求;
  • 缓存(memcache)+单实例数据库:使用缓存,提升数据的读取速率;
  • 缓存+主从数据库+读写分离:降低数据库的读取压力;
  • 缓存+主从数据库集群+读写分离+分库分表:降低数据写入的压力;
  • nosql+主从数据库集群+读写分离+分库分表:支持对数据的并发性、高效性以及不固定格式数据的存取。
1.2 Redis介绍与安装
  • Redis,由C语言开发的、开源的、高性能的,以键值对形式存储数据的非关系型(NoSQL)数据库。

  • SQL与NoSQL数据库:

    • SQL数据库:关系性数据库,数据存储在表中,表中的数据具有固定格式,要求数据具有一致性。
      • Oracle、MySQL、SQL server
    • NoSQL数据库(not only sql):以键值对方式存储的非关系型数据库,支持高并发,数据格式不固定等特点,主要用于快速存取,如双十一秒杀。
      • Redis、MongoDB、Hbase Hadoop
  • Redis特性

    • Redis支持持久化,可以将内存数据保存到磁盘中,可进行重复使用;
    • Redis除支持key-value数据类型外,还支持list、set等多种数据类型;
    • Redis支持数据备份。
  • Redis使用场景

    • 点赞/秒杀/直播平台的在线好友列表/商品排行榜/单点登录
  • Redis-Windows下载:https://github.com/microsoftarchive/redis/releases

2. Redis的使用
2.1 Redis基本命令
  • Linux下安装Redis-5.0.9

    wget http://download.redis.io/releases/redis-5.0.9.tar.gz		-- 下载安装包
    tar xzf redis-5.0.9.tar.gz										-- 解压安装包
    cd redis-5.0.9/													-- 进入redis目录
    sudo apt install make
    sudo apt install make-guile										-- 安装make相关指令
    sudo apt-get insatll gcc										-- 安装gcc,Redis源码为c语言
    make															-- 源码编译
    
    '''
    E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)
    E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
    '''
    -- 升级所占用中,解决方法
    sudo rm /var/lib/dpkg/lock-frontend
    sudo rm /var/lib/dpkg/lock
    
  • 结束进程

    kill -9 进程id
    sudo kill 进程id
    
  • 查看Redis帮助

    redis-server --help		-- 查看Redis服务
    redis-cli --help		-- 查看Redis客户端
    
  • 启动Redis服务

    -- windows环境下
    redis-server.exe		-- 启动Redis服务
    redis-cli.exe			-- 启动Redis客户端
    -- Linux环境下
    redis-server			-- 启动Redis服务
    redis-cli				-- 启动Redis客户端
    
  • 重启Redis服务

    sudo service redis-server restart
    
  • 编辑Redis配置文件

    sudo vim /etc/redis/redis.conf
    
  • 查看Redis类型详细信息

    help @类型
    
  • 查看当前数据库的数量

    dbsize					-- Redis默认最大支持16个数据库
    
  • 查看所有键值信息

    keys *					-- 打印所有的键
    
  • 清空数据库的所有键值

    flushdb					-- 清空当前数据库的键值
    flushall				-- 清空所有数据库的键值
    
  • 判断某个key是否存在

    exitsts key
    
  • 使用config查看Redis文件配置参数

    config get 参数名称		-- 如config get port,查看端口号
    
  • Redis更多命令查看:http://doc.redisfans.com/

2.2 Redis常用数据类型
  • redis-string类型

    • Redis的最基本类型,一个key对应一个value;

    • string类型可以包含任意数据,最大不超过512MB;

    • 常用方法

      • set/get/del/append/strlen

        set	key value					-- 为key设置值value
        get key							-- 获取key的值
        mset key1 value1 key2 value2..	-- 为多个key同时设置值
        mget key1 key2...				-- 同时获取多个key的值
        append key value				-- 为key字段追加值value
        strlen key						-- 获取key的值长度
        
      • incr/decr/incrby/decrby

        incr key						-- 执行key的值+=1运算
        decr key						-- 执行key的值-=1运算
        incrby key value				-- 执行key的值+=value运算
        decrby key value				-- 执行key的值-=value运算
        
      • getrange/setrange

        getrange key start end			-- 获取key的值[start, end]区间的字符串
        setrange key start value		-- 对key的值从start位置开始替换成value
        
      • expire/setex

        expire key sec					-- 为key设置有效时长,超过时间后key自动删除,key值必须存在
        setex key sec value				-- 与expire类似,不过不需要key值存在,会创建key-value
        
    • 应用

      • incr函数可以实现点赞;
      • expire函数可以实现验证码的超时设置。
  • redis-list类型(单值多value)

    • list为简单的字符串列表,可以添加元素到表头或表尾,实质是列表。

    • 常用方法

      • lpush/rpush/lrange

        lpush key value1 value2..		-- 从左向右插入序列,与栈相同
        rpush key value1 value2..		-- 从右向左插入序列,与队列相同
        lrange key start end			-- 获取key的值在[start, end]范围内元素
        
      • lpop/rpop

        lpop key						-- 从左删除key的值
        rpop key						-- 从右删除key的值
        
      • lindex 从左向右按照索引获取元素

        lindex key index				-- 获取key的下标为index的值
        
      • llen 获取列表长度

        llen key						-- 获取key的长度
        
      • lrem 删除元素

        lrem key n value				-- 删除key中n个value值
        
      • ltrim 截取范围内的值并赋值

        ltrim key start end				-- 截取key[start, end]区间的值并赋值给key
        
      • rpoplpush list1 list2

        rpoplpush key1 key2				-- 从key1右边取一个值添加到key2的左边
        
      • lset key index value

        lset key index value			-- 将key中下标为index的值换成value
        
      • insert key before/after

        insert key before/after ele s	-- 在key中的ele元素前/后添加s
        
    • 应用

      • Redis的单key多value可以用于记录客户购物清单;
      • 可以用ltrim实现浏览记录的更新。
  • redis-hash类型

    • hash为一个键值对的集合,适合于存储对象。

    • 常用方法

      • hset/hget/hmset/hmget/hgetall/hdel

        hset field key value			-- 为field下的key设置值为value
        hget field key					-- 获取field下的key的值
        hmset field key1 value key2 value1	-- 为field下的多个key设置值
        hmget field key1 key2			-- 获取field下的多个key的值
        hgetall field					-- 获取field下的所有key及值
        hdel field key					-- 删除field下的key
        
      • hlen 求哈希长度

        hlen field						-- 获取field下的key数量
        
      • hexits 判断某值是否存在

        hexits field key				-- 判断field下的key是否存在
        
      • hkeys/hvals

        hkeys field						-- 获取field下的所有key
        hvals field						-- 获取field下的所有value
        
    • 应用

      • hash的key:{field:value...}可以实现对各种信息(多属性)的记录。
  • redis-set(无重复值)

    • set是string类型的无序集合。

    • 常用方法

      • sadd/smembers/sismember

        sadd set value1 value2..		-- 向set中添加值,自动去掉重复
        smembers set					-- 打印set的值
        sismember set x					-- 判断x是否是set的成员
        
      • scard 获取集合长度

        scard set						-- 获取set中元素个数
        
      • srem 删除元素

        srem set x						-- 删除set中的x
        
      • srandmember/spop 随机获取成员

        srandmember set n				-- 随机在set中获取n个数
        spop set						-- 随机在set中弹出一个数
        
      • smove 移动元素

        smove set1 set2	x				-- 将set中的x移动到set2中
        
      • 集合运算

        sdiff set1 set2					-- 计算set1与set2的差集
        sinter set1 set2				-- 计算set1与set2的交集
        sunion set1 set2				-- 计算set1与set2的并集
        
    • 应用

      • srandmember可以实现随机抽奖。
  • redis-Zset类型(有序集合)

    • 常用方法

      • zadd/zrange

        zadd zset key1 value1 key2 value2..		-- 向zset中添加key-value,自动按key排序,key为float类型
        zrange zset start end [withscores]		-- 获取zset[start, end]区间的值
        
      • zrangebyscore 获取范围内的值

        zrangebyscore zset start end [limit a b]	-- 获取zset中key在[start, end]中的值,取第[a, b]条
        
      • zrem 删除元素

        zrem zset key							-- 删除zset中的key
        
      • zcard/zcount/zrank

        zcard zset								-- 求zset中k-v的条数
        zcount zset start end					-- 求zset中区间在[start, end]间的条数
        zrank zset v							-- 返回zset中v的下标,从0开始
        
    • 应用

      • 集合按照key值进行排序,可以对成绩进行排序;
      • Zset支持区间操作,可以获取某一区间详细信息。
3. *Redis主从配置
  • 一个master可以拥有多个slave,而每个slave同时又可以拥有多个slave,如此就形成了庞大的多级服务器架构。

  • master用于写数据,而slave用于读取数据,实际上网站的读写比例一般为10:1,因此通过主从配置可以实现读写分离。

  • master和slave都是一个redis实例(redis服务)。

    在这里插入图片描述

  • 主从配置命令

    主配置

    • 修改redis.conf文件

      bind 0.0.0.0								-- 可以是0.0.0.0或主机ip
      
    • 开启主服务

      src/redis-server redis.conf
      

    从配置

    • 复制redis下的redis.conf文件

      cp redis.conf slave.conf
      
    • 修改slave.conf文件

      bind 192.168.50.128							-- 绑定主机ip
      replicaof 192.168.50.128 6379
      port 6378									-- 设置端口,不能和redis.conf的port相同
      
    • 开启从服务

      src/redis-server slave.conf
      

    数据操作

    • 查看主从关系

      src/redis-cli -h 192.168.50.128 info Replication
      
    • 进入主客户端

      src/redis-cli -h 192.168.50.128 -p 6379		-- 这里可以不指定主机ip
      
    • 进入从客户端

      src/redis-cli -h 192.168.50.128 -p 6378		-- 这里必须指定主机ip,否则报错
      
    • 在主客户端向数据库写入

      hmset user id a1 name amateur age 18
      
    • 在从客户端向数据库写入(从客户端只拥有读取权限)

      hset cust id a1		-- (error) READONLY You can't write against a read only replica.
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值