Redis 学习笔记(一)

Redis 学习笔记(一)

  • 五种数据结构

    • String

      • SET key value //存入字符串键值对

      • MSET key value [key value …] //批量存储字符串键值对

      • SETNX key value //存入一个不存在的字符串键值对

      • GET key //获取一个字符串键值

      • MGET key [key …] //批量获取字符串键值

      • DEL key [key …] //删除一个键

      • EXPIRE key seconds //设置一个键的过期时间(秒)

      • INCR key //将key中储存的数字值加1

      • DECR key //将key中储存的数字值减1

      • INCRBY key increment //将key所储存的值加上increment

      • DECRBY key decrement //将key所储存的值减去decrement

      • 对象缓存

        • SET user:1 value(json格式数据)
        • MSET user:1:name zhangsan user:1:balance 888
        • MGET user:1:name user:1:balance
      • 分布式锁

        • SETNX product:10001 true //返回1代表获取锁成功

        • SETNX product:10001 false //返回0代表获取锁失败

        • SET product:10001 true ex 10 nx //防止程序意外终止导致死锁

    • hash

      • HSET key field value //存储一个哈希表key的键值

      • HSETNX key field value //存储一个不存在的哈希表key的键值

      • HMSET key field value [field value …] //在一个哈希表key中存储多个键值对

      • HGET key field //获取哈希表key对应的field键值

      • HMGET key field [field …] //批量获取哈希表key中多个field键值

      • HDEL key field [field …] //删除哈希表key中的field键值

      • HLEN key //返回哈希表key中field的数量

      • HGETALL key //返回哈希表key中所有的键值

      • HINCRBY key field increment //为哈希表key中field键的值加上增量increment

      • 对象缓存

        • HMSET user {userId}:name zhangsan {userId}:balance 1888
        • HMSET user 1:name zhangsan 1:balance 1888
        • HMGET user 1:name 1:balance
    • 列表List

      • LPUSH key value [value …] //将一个或多个值value插入到key列表的表头(最左边)
      • RPUSH key value [value …] //将一个或多个值value插入到key列表的表尾(最右边)
      • LPOP key //移除并返回key列表的头元素
      • RPOP key //移除并返回key列表的尾元素
      • LRANGE key start stop //返回列表key中指定区间内的元素,区间以偏移量start和stop指定
      • BLPOP key [key …] timeout //从key列表表头弹出一个元素,若列表中没有元素,阻塞等待
      • BRPOP key [key …] timeout //从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待
    • 集合Set

      • Set常用操作

        • SADD key member [member …] //往集合key中存入元素,元素存在则忽略, 若key不存在则新建
        • SREM key member [member …] //从集合key中删除元素
        • SMEMBERS key //获取集合key中所有元素
        • SCARD key //获取集合key的元素个数
        • SISMEMBER key member //判断member元素是否存在于集合key中
        • SRANDMEMBER key [count] //从集合key中选出count个元素,元素不从key中删除
        • SPOP key [count] //从集合key中选出count个元素,元素从key中删除
      • Set常用计算

        • SINTER key [key …] //交集运算
        • SINTERSTORE destination key [key …] //将交集结果存入新集合destination中
        • SUNION key [key …] //并集运算
        • SUNIONSTORE destination key [key …] //将并集结果存入新集合destination中
        • SDIFF key [key …] //差集运算
        • SDIFFSTORE destination key [key …] //将差集结果存入新集合destination中
    • 有序集合ZSet

      • ZSet常用操作
        • ZADD key score member [[score member]…] //往有序集合key中加入带分值元素
        • ZREM key member [member …] //从有序集合key中删除元素
        • ZSCORE key member //返回有序集合key中元素member的分值
        • ZINCRBY key increment member //为有序集合key中元素member的分值加上increment
        • ZCARD key //返回有序集合key中元素个数
        • ZRANGE key start stop [WITHSCORES] //正序获取有序集合key从start下标到stop下标的元素
        • ZREVRANGE key start stop [WITHSCORES] //倒序获取有序集合key从start下标到stop下标的元素
      • ZSet常用计算
        • ZUNIONSTORE destkey numkeys key [key …] //并集计算
        • ZINTERSTORE destkey numkeys key [key …] //交集计算
  • Redis在Linux下的安装

    下载地址:http://redis.io/download
    安装步骤:
    # 安装gcc
    yum install gcc
    
    # 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压
    wget http://download.redis.io/releases/redis-5.0.3.tar.gz
    tar xzf redis-5.0.3.tar.gz
    cd redis-5.0.3
    
    # 进入到解压好的redis-5.0.3目录下,进行编译与安装
    make
    
    # 修改配置
    daemonize yes  #后台启动
    protected-mode no  #关闭保护模式,开启的话,只有本机才可以访问redis
    # 需要注释掉bind
    #bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
    
    # 启动服务
    src/redis-server redis.conf
    
    # 验证启动是否成功 
    ps -ef | grep redis 
    
    # 进入redis客户端 
    src/redis-cli 
    
    # 退出客户端
    quit
    
    # 退出redis服务: 
    (1)pkill redis-server 
    (2)kill 进程号                       
    (3)src/redis-cli shutdown 
    
    
  • Redis是单线程吗?

    • Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的
  • Redis单线程为什么还能那么快?

    • 因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题。
  • Redis单线程如何处理高并发的客户端链接?

    • Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。
      在这里插入图片描述
  • 高级命令

    • keys:全量遍历键,用来列出所有满足特定正则字符串规则的key,当redis数据量比较大时,性能比较差,要避免使用

    • scan:渐进式遍历键

      • SCAN cursor [MATCH pattern] [COUNT count]

      • scan 参数提供了三个参数,第一个是 cursor 整数值(hash桶的索引值),第二个是 key 的正则模式,第三个是一次遍历的key的数量(参考值,底层遍历的数量不一定),并不是符合条件的结果数量。第一次遍历时,cursor 值为 0,然后将返回结果中第一个整数值作为下一次遍历的 cursor。一直遍历到返回的 cursor 值为 0 时结束。

        注意:但是scan并非完美无瑕, 如果在scan的过程中如果有键的变化(增加、 删除、 修改) ,那么遍历效果可能会碰到如下问题: 新增的键可能没有遍历到, 遍历出了重复的键等情况, 也就是说scan并不能保证完整的遍历出来所有的键, 这些是我们在开发时需要考虑的

      在这里插入图片描述

    • Info:查看redis服务运行信息,分为 9 大块,每个块都有非常多的参数,这 9 个块分别是:

      • Server 服务器运行的环境参数

      • Clients 客户端相关信息

      • Memory 服务器运行内存统计数据

      • Persistence 持久化信息

      • Stats 通用统计数据

      • Replication 主从复制相关信息

      • CPU CPU 使用情况

      • Cluster 集群信息
        **

      • Server 服务器运行的环境参数

      • Clients 客户端相关信息

      • Memory 服务器运行内存统计数据

      • Persistence 持久化信息

      • Stats 通用统计数据

      • Replication 主从复制相关信息

      • CPU CPU 使用情况

      • Cluster 集群信息

      • KeySpace 键值对统计数量信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值