概述

  • redis 是一个开源的,内存中的数据解构存储系统,可以用作数据库,缓存和消息中间件
  • redis 内置了 复制,lua脚本,lru驱动事件,事务和不同级别的磁盘持久化,并通过redis哨兵和自动分区提供高可用性

    数据类型

    Redis - 基础概览 - 图1

  • String

    • 数值类型
    • 字符类型
    • bitmaps
  • hashs
  • list
  • sets
  • sorted sets
  • redis 是单进程 ,单线程,单实例的,并发请求很多的时候是如何变快的呢?Redis - 基础概览 - 图2

    使用help帮助自己学习redis

    String 字符串类型操作

    • set key value kv 赋值
    • get key 得到key对应的value
    • mget
    • mset
    • append
    • range
    • getrange
    • setrange
    • strlen
    • getset k1 value 设定新值并吧老值返回过来
    • msetnx k1 v1 k2 v2
      • 只能新建
    • msetxx k1 v1 k2 v2
      • 只能更新

set key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET] — nx 只能新建 为如果key不存在的情况下进行kv赋值 使用场景为分布式锁 — 比如很多人同时对一个redis进行赋值使用,谁先进行了赋值之后,其他人的操作都会返回nil,即赋值不成功 — xx 只能更新,意为当key存在的时候才可以进行赋值 mset k1 v1 k2 v2 — 批量进行赋值,取值 mget k1 k2 append 对k对应的值进行追加 set k1 hello append k1 addicated get k1 hello addicated getrange k start end —按照下标进行范围取值 getrange k1 0 5 hello 知识点 正反向索引 在getrange 中同样适用,即,字符串最后一个字符下标为 -1 ,一次-2.。。-n 但可偷懒的来进行适用 getrange k1 0 -1 — 完整输出字符串 getrange k1 5 -1 — 输出下标5 到末尾 setrange k1 offset v — 从下标为offset位置进行覆盖写入v setrange k1 6 world get k1 输出为 hello world strlen k1 — 返回字符串长度

数值操作

incr

decr

incrby k1 增量

decrby k1 减量

bitmap

Redis - 基础概览 - 图3

setbit

  • offset为二进制位的偏移量 并不是数组

    bitpos

  • 返回字符串里面第一个被设置为1或者0的bit位。

  • 默认情况下整个字符串都会被检索一次,只有在指定start和end参数,该范围被解释为一个字节的范围,而不是一系列的位。所以start=0 并且 end=2是指前三个字节范围内查找。

    bitcount

  • key [start end]

  • 统计字符串被设置为1的bit数.

一般情况下,给定的整个字符串都会被进行计数,通过指定额外的 start 或 end 参数,可以让计数只在特定的位上进行。

bitop

  • operation destkey key [key …]
  • 对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。

    使用场景

  • 有用户系统,统计用户登录天数,且窗口随机,即统计日期随机

    List

    同向命令相当于将redis的list用做栈
    反向命令则相当于吧list当作队列来进行使用
    操作下标的话可以当作数组来进行使用
    阻塞,单播队列FIFO

    LPUSH

  • 左押入,

  • lpush k1 a b c d e f 实际上数据进入的顺序为 f e d c b a

    RPUSH

  • 右押入

  • rpush 则与上面相反

    LRANGE

  • lrange k1 start end

    LINDEX

  • 按照下标取值

    LSET

  • LSET k1 下标 值 按照下标设定值

    LREM k1 count value

  • 移除某个列表下 count数量的 value

  • count又分为 正数,负数 ,0 三种情况
  • 为正数时,从左往右遍历list进行去除对应个数的value

    LPOP

  • 删除并返回元素

    LINSERT k1 after value insertValue

  • 在某个值后插入,如果值重复的话,只在第一个值进行操作

    LLEN

  • 获取长度

    HASH

    场景

  • 对field进行计算

  • 点赞,收藏,详情页,减少接口请求数,页面提速

Redis - 基础概览 - 图4

  • set k1::属性名 属性值
  • get k1::属性名
  • keys k1* 得到该对象的所有属性名,值

127.0.0.1:6379> keys p1* 1) “p1::age” 2) “p1::name” 127.0.0.1:6379>

HSET k1 属性1 属性值

HGET k1 属性1

HMGET k1 属性1 属性2

HMSET k1 属性1 属性值1 属性2 属性值2

HKEYS k1

  • 查看该对象所有的key

    HVALS k1

  • 查看该对象所有的value

    HGETALL k1

  • 获取所有属性名,值

    HINCRBYFLOAT k1 属性名1 属性值

  • 支持计算

    HINCR k1 属性名1 属性值

    应用场景

  • 商品详情场景,将商品所有的详情缓存到redis - hash中,

    Set

  • List 是顺序的,这里的顺序指的是插入的取出的顺序,

  • Set 是去重的一种集合,里面不维护元素变化顺序,以及插入取出顺序,简单来说是无序的

    无序

    去重

    随机事件

  • SRANDMEMBER key count 取出多个

  • SPOP 随机取出一个,且不放回

    正数

  • 取出一个去重的结果集(不能超过已有集

    负数

  • 取出一个带重复的结果集,一定满足要求的数量

    0

  • 不返回

    SADD k1 v1 v2 v3 v4

    SMEMBERS k1

  • 查询k1集合所有元素

    SINTER k1 k2

  • 取k1,k2交集

    SINTERSOTRE dest k1 k2

  • 取 k1,k2 交集 并保存为 dest

    SUNION

    SUNIONSTORE

  • 并集同上

    SDIFF

    SDIFFSTORE

  • 差集同上。

    SORTED_SET

  • 有序集合. 这个序是对元素排序的那个顺序

  • 按照内存左小右大的顺序进行排列值 且不随命令发生变化

    ZRANGE k1 0 -1 按照索引取值

  • 取得有序集合中所有的元素

    ZRANGEBYSCORE

    Redis - 基础概览 - 图5
    Redis - 基础概览 - 图6

    ZSCORE k1 value

  • 查k1中对应value的分值 - 即,用来进行排序的值

    集合操作

  • 并集

  • 交集
  • 权重/聚合指令

    排序是怎么实现的?crud的速度

  • skip list 跳跃表

    redis - 二进制安全

  • 在redis中传输的只是字节流

  • 即,set任意字符,都会当作字节进行存储而不进行类型计算,当然如果想要进行类型计算 obejct encoding key 即可
  • 二进制安全的意思就是,只关心二进制化的字符串,不关心具体格式,只会严格的按照二进制的数据存取,不会妄图以某种特殊格式解析数据。