Redis学习总结

1、对Redis的初识

  • Redis中的某些全局命令

    keys * : 查看所有键
    dbsize :获取键总数
    flushdb:清除当前数据库中的数据
    flushall:清空Redis所有数据库的数据
    exists key:检查键是否存在
    del key:删除键
    type key:查看键的数据结构类型
    expire key seconds:设置键过期时间
    ttl key:返回键的剩余过期时间,有3种返回值,如表格

    返回值类型 说明
    大于等于0的整数 键剩余的过期时间
    -1 键没设置过期时间
    -2 键不存在
  • Redis使用单线程架构和I/O多路复用模型来实现高性能的内存数据库服务,Redis单线程的处理能力超群的原因如下三点:

    ①纯内存访问,Redis将所有数据放在内存中,内存的响应时长大约为100ns,这是Redis达到每秒万级别访问的重要基础

    ②非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不再网络I/O上浪费事件

    ③单线程避免线程切换和竞争产生的消耗

2、Redis中的五种数据结构

2.1字符串string

  • 常用命令

    set key value:为key设置值
    setex key seconds value:为key设置的同时指定key过期时间
    setnx key value:键不存在时才能设置成功,主要用于添加
    set key value xx:键存在时才能设置成功,主要用于更新
    get key :根据key获取值,若key不存在则返回nil(空)
    mset key value [key value ...]:批量设置值
    mget key [key ...]:批量获取值
    incr key:用于对值进行自增操作,返回结果分为三种类型

    key所对应的value 说明
    value不是整数 返回错误
    value是整数 返回自增后的结果
    key不存在 按照value为0进行自增,返回结果为1

    incrby key value:自增指定数字
    incybyfloat key vlaue:自增浮点数
    decr key :自减
    decrby key value:自减指定数字
    append key value:向字符串尾部追加值
    strlen key:返回字符串的长度
    getset key value:设置并返回原值
    setrange key offset value:设置指定位置的字符
    getrange key start end:获取部分字符串(下标从0开始)

  • 使用场景
    ①缓存
    ②计数(利用incr key功能)
    ③限速,如限制用户每分钟获取短信验证码的频率(利用setex key seconds value 和incr key)

2.2哈希hash

  • 常用命令
    hset key field value:设置值
    hget key field:获取值
    hdel key field[field ...]:删除field
    hlen key:计算field的个数
    hmget key field[field ...]:批量获取field的值
    hmset key field value[field value ...]:批量设置值
    hexists key field:判断field是否存在,若存在返回1,否则返回0
    hkeys key:获取所有的field
    hvals key:获取所有value
    hgetall key:获取所有的field-value
    hincrby key field value:设置field的自增值
    hincrbyfloat key field value:设置field的自增浮点数
    hstrlen key field:计算field对应的value的字符串长度

2.3列表list

  • 常用命令

    rpush key value[value...]:从右边插入元素
    lpush key value[value...]:从左边插入元素
    linsert key before|after pivot vlaue :从列表找出pivot元素,在其前(before)或其后(after)插入一个新的元素value
    lrange key start end:获取指定范围内的元素列表(索引下标从左到右是0到N-1,从右到左是-1到-N,若要获取全部列表元素,可用lrange key 0 -1)
    lindex key index:获取列表指定索引下标的元素
    llen key :获取列表长度
    lpop key:从列表左侧弹出元素
    rpop key:从列表右侧弹出元素
    lrem key count value:删除指定元素,根据count的取值可以分为三种情况

    count取值 说明
    count>0 从左到右,删除最多count个元素
    count<0 从右到左,删除最多count绝对值个元素
    count=0 删除所有

    ltrim key start end:按照索引范围修建列表(只保留列表原索引范围内的元素)
    lset key index newValue:修改指定索引下标的元素

2.4集合set

  • 常用命令

    sadd key element[element...]:添加元素,返回结果为添加成功的元素个数
    srem key element[element...]:删除元素,返回结果为成功删除的元素的个数
    scard key:计算集合元素个数
    sismember key element:判断元素是否在集合中,若在则返回1否则返回0
    srandmember key [count]:随机从集合中返回指定个数的元素
    spop key [count]:从集合中随机弹出指定个数的元素
    smembers key:获取所有元素

  • 集合间操作

    sinter key[key...]:获取多个集合的交集
    sdiff key[key...]:获取多个集合的差集
    sunion key[key...]:获取多个集合的并集
    sinterstore destination key[key...]:将集合的交集保存在destination中
    sunionstore destination key[key...]:将集合的并集保存在destination中
    sdiffstore destination key[key...]:将集合的差集保存在destination中

  • 使用场景
    集合类型比较典型的使用场景是标签(tag);例如一个用户可能对体育、娱乐比较感兴趣,另外一个用户对历史、新闻比较感兴趣,这些兴趣点就是标签。有了这些数据就可以得到喜欢同一个标签的人,以及用户的共同喜好的标签,这些数据对于增强用户粘性比较重要。

2.5有序集合zset

  • 常用命令

    zadd key score member[score member...]:添加成员,返回结果为添加成功的个数,有关zadd命令需要注意的是,Redis3.2为zadd命令新增了四个选项

    选项名称 解释说明
    nx member不存在时才可以设置成功,主要用于添加
    xx member必须存在时才可以设置成功,主要用于修改
    ch 返回此次操作后,有序集合元素和分数发生变化的个数
    incr 对score做增加,相当于zincrby

    zcard key:计算成员的个数
    zscore key member:返回某个成员的分数,若成员不存在则返回nil
    zrank key member:按照分数从低到高计算成员的排名(排名从0开始)
    zrevrank key member:按照分数从高到低计算成员的排名
    zrem key member[member...]:删除成员
    zincrby key increment member:增加成员的分数
    zrange key start end [withscores]:按照分数从低到高排名,返回指定下标范围内的成员(下标从0开始)
    zrevrange key start end [withscores]:按照分数从高到低排名,返回指定下标范围内的成员
    zcount key min max:返回指定分数分为内的成员个数
    zrangebyscore key min max [withscores] [limit offset count] :返回指定分数范围的成员
    zrevrangebyscore key max min [withscores] [limit offset count]:返回指定分数范围的成员

    参数列表 是否必须 解释说明
    zrangebyscore 按照分数从小到大但会指定分数范围内的成员
    key 有序集合键的名称
    min 最小分数值,可使用-inf代替,请注意:参数前加‘(’符号作为开头表示小于,即开区间,而‘(’符号与成员之间不能有空格)
    max 最大分数值,可使用+inf代替
    withscores 将成员分数一并返回
    limit 返回结果是否分页,命令中若包含limit则offset、count必须输入
    offset 返回结果起始位置
    count 返回结果数量

    如:zrangebyscore zset1 -inf +inf withscores limit 1 2 :按照指定的元素范围和数量获取所有的元素
    zrangebyscore zset1 (95 (120 withscores limit 0 1 :按照指定的元素范围和数量获取95<分数<120的元素
    zremrangebyrank key start end:删除指定排名内的升序元素
    zremrangebyscore key min max:删除指定分数范围内的成员

  • 集合操作

    zinterstore destination numkeys key [key...] [weights weight [weight...]] [aggregate sum|min|max] :交集

    参数 说明
    destination 交集计算结果保存到这个键
    numkeys 需要做交集计算的键的个数
    key[key…] 需要做交集计算的键
    weights weight [weight…] 每个键的权重,当交集时每个键中的member会将自己的分数乘以权重,默认情况下权重为1
    aggregate sum(min、max) 计算成员交集后,分数可以按照sum(和)、min(最小值)、max(最大值)做汇总,默认值是sum

`zunionstore destination numkeys key [key...] [weights weight [weight...]] [aggregate sum|min|max]` :并集
  • 适用场景:排行榜系统

    ①用户mike上传了一个视频,获得3个点赞:zadd user:rangking:2016_03_15 3 mike
    ②之后又获得一个点赞,使用zincrby:zincrby user:rangking:2016_03_15 1 mike
    ③取消用户赞数:zrem user:rangking:2016_03_15 mike
    ④展示获取赞数最多的十个用户:zrevrangebyrank user:rangking:2016_03_15 0 9

3、Redis中键的管理

  • rename key newkey :键重命名(请注意:若在rename之前,newkey已经存在,则它的值将被覆盖)
127.0.0.1:6379> set a b //为a设值为b
127.0.0.1:6379> set c d //为c设值为
127.0.0.1:6379> rename a c //为键a重命名为c
127.0.0.1:6379> mget a c //返回结果为nil b 
  • randomkey:随机返回一个键
  • expire key seconds:键在seconds秒后过期
各种情况 说明
expire key seconds的键不存在 返回结果为0
expire key seconds过期时间设置为负值 键立刻被删除,同使用del命令一样
persist key 将键的过期时间删除
set key value 对于字符串类型键,执行set命令去去掉过期时间

你可能感兴趣的:(学习笔记)