redis入门指南-入门

前言

书本中这一章节讲得是使用redis-cli来操作redis的各种数据类型及操作命令, 其中还穿插了博客的小例子

redis的键

Redis的keys命令用于管理键。使用Redis的keys命令语法如下所示:

1
redis 127.0.0.1:6379> COMMAND KEY_NAME

比如:

热身

  1. 获取符合规则的键名列表
    keys pattern
    pattern: 正则
  2. 设置键值
    set bar 1
  3. 判断键知否存在
    如果存在返回1, 否则返回0
    exists key
  4. 删除键
    del key [key ...]
    可以删除一个或者多个键, 返回值是删除的键的个数
  5. 获取键值的数据类型
    type key

字符串类型

  1. 赋值和取值

    1
    2
    set key value
    get key
  2. 递增数字
    如果是存储的整数形式, 可以使用incr让当前键值递增,并返回递增后的值
    当要操作的键不存在的时候, 默认值就是0 ,所以加1就是1了
    如果操作的是字符串类型, 就会报错

  3. 增加指定的整数
    前面incr是增加1, 如果想一次增加更多的值
    incrby key increment
  4. 减少指定的值
    decrdecrby 和上面的增加的类似
  5. 向尾部增加值
    append key value
    如果不存在key, 则类似set key value的功能, 返回的是追加后的字符串的总长度

    我们可以看到对于整数类型, 也是可以操作的
  6. 获取字符串长度
    strlen key 不存在则返回0
    注意的是: 中文使用的utf-8编码, 所以一个中文长度是3
  7. 同时获取和设置多个键值
    mget key [key …]
    mset key value [key value …]
  8. 位运算
    自行研究

散列类型

我们可以这样理解, 我们有一个对象, 比如: student, 他有name, age, address三个属性, 如果按照键值对存储student信息就是这样:

如果按照散列方式, 就是面向对象的方式存储了

  1. 赋值和取值
    hset key field value
    hget key field
  2. 判断字段是否存在
    hexists key field
  3. 当字段不存在时赋值
    hsetx key field value
    hset类似, 区别在于如果字段存在将不做任何操作
  4. 增加数字
    hincrby key field increment
  5. 删除字段
    可以删除多个字段, 返回删除的个数
    hdel key field [field ...]
  6. 只获取字段名或者字段的值
    hkeys key
    hvals key
  7. 获取字段数量
    hlen key

列表类型

列表: list, 很简单理解这种类型, redis使用的是双向链表的数据结构来实现队列, 所以能理解的是: 在双向链表中插入和删除数据是很快的, 时间复杂度是O(1), 但是通过索引访问元素却很慢
redis的列表在很多场景下很有用, 比如:我们只关心社交网络的最新的数据, 这个时候用redis来存储这些数据, 获取最新的100条数据就变得相当简单快速, 而且在两端插入记录也是非常快.
redis用作队列来使用也是非常常见
下面的操作其实就是数据结构中的常用操作

  1. 向列表两端增加元素
    lpush key value [value ...] 向列表左边增加元素, 返回增加元素后列表的长度
    rpush key value [value ...] 向列表右边增加元素
  2. 从列表两端弹出元素
    lpop key
    rpop key
    这两个操作可以应用在队列中
  3. 获取列表中元素的个数
    llen key 时间复杂度是O(1), 而不是像有些数据库遍历所有整个表
  4. 获取列表片段
    lrange key start stop
    start和stop是包含关系, 索引也是从0开始的, 同时还支持负的索引
  5. 删除列表中指定的值
    lrem key count value
    删除前count个值为value的元素, 返回删除个数
  6. 获得/设置指定索引的元素值
    类似对数组的操作
    lindex key index 返回指定索引元素, 从index开始
    lset key index value
  7. 只保留列表的指定片段
    ltrim key start stop
  8. 向列表中插入元素
    linsert key before|after privot value
  9. 将元素从一个列表转到另一个列表
    rpoplpush source destination

集合类型

列表是list, 集合就是set
list是有序的, 按照插入的顺序排列, 且可以重复
set是无序的, 不可以重复
redis使用的是值为空的散列表(hash table)实现, 所以操作的时间复杂度也是O(1), 最方便的就是可以在多个集合类型键之间进行交集, 并集, 和差集运算

  1. 增加和删除元素
    sadd key member [member ...]
    srem key member [member ...]
  2. 获得元素中所有元素
    smembers key
  3. 元素是否存在
    sismember key member 时间复杂度O(1)
  4. 集合间运算
    sdiff key [key ...]
    sinsert key [key ...]
    sunion key [key ...]
  5. 获取元素中集合个数
    scard key
  6. 随机获得集合中元素
    srandmember key [count]
  7. 从集合中弹出一个元素
    spop key

有序集合

类似的sortedSet

  1. 增加元素
    zadd key score member [score member ...]
    zadd向有序集合中加入一个元素和该元素的分数. 如果该元素已经存在, 则会用心的分数替换原来的分数, 分数不仅支持整数还支持浮点数
  2. 获取元素的分数
    zscore key member
  3. 获得排名在某个范围的元素列表
    zrange key start stop [withscores]
    zrevrange key start stop [withscores]
  4. 获取指定分数范围
    zrangebyscore key min max [withscores] [limit offset count]
  5. 增加某个元素的分数
    zincrby key increment member
  6. 获取元素中集合的数量
    zcard key
  7. 获取指定分数范围内的元素个数
    zcount key min max
  8. 删除一个或多个元素
    zrem key member [member ...]
  9. 按照排名范围删除元素
    zremrangebyrank key start stop
  10. 按照分数范围删除元素
    zremrangebyscore key min max
  11. 获得元素的排名
    zrank key member
    zrevrank key member