乐趣区

关于redis:Redis-基础学习

什么是 Redis?

  1. Redis is in the family of databases called key-value stores.
  2. Redis (Remote DIctionary Server) 通常被称为数据结构服务器。

键值存储的实质

The essence of a key-value store is the ability to store some data, called a value, inside a key. This data can later be retrieved only if we know the exact key used to store it.

  1. 键值存储的实质是在键中存储一些数据(被称为值)的能力。
  2. 仅当咱们晓得用于存储它的键时,能力在稍后检索此数据。

所以 Redis 的惯例函数都是围绕键和值开展。

Redis 反对的数据类型?

Redis 能够存储键和不同类型的值之间的映射。

键的类型只能为字符串。

值常见有五种数据类型:

  • 字符串(string)。
  • 列表(list)。
  • 汇合(set)。
  • 哈希表(hash)。
  • 有序汇合。

Redis keys 命令

  1. 删改查。

    • 删:

      • DEL key [key …]
    • 改:

      • RENAME key newkey
    • 查:

      • key 所贮存的值的类型

        • TYPE key
      • 查找所有合乎给定模式的 key:

        • KEYS pattern
  2. 过期相干:

    • 设置过期工夫:

      • EXPIRE key seconds
    • 获取剩余时间:

      • TTL key
    • 勾销过期工夫:

      • PERSIST key

Redis 字符串 (Strings)

  1. 设置键值对

    • 设置一个:SET key value
    • 同时设置一个或多个:MSET key value [key value …]
  2. 通过键获取值

    • 获取残缺的值

      • 获取指定键的值

        • GET key
      • 同时获取一个或多个键的值

        • MGET key [key …]
    • 获取值的字符串的长度

      • STRLEN key
    • 获取值的子字符串

      • GETRANGE key start end
  3. 覆写与追加

    • 从偏移量 offset 开始用 value 覆写给定 key 所贮存的字符串值

      • SETRANGE key offset value
    • 将 value 追加到 key 原来的值的开端

      • APPEND key value
  4. 指定键对应的值的增与减

      • 自增:INCR key
      • 增量:

        • 整型:INCRBY key increment
        • 浮点型:INCRBYFLOAT key increment
      • 自减:DECR key
      • 减量: DECRBY key decrement

Redis 哈希 (Hashes)

Hashes are maps between string fields and string values, so they are the perfect data type to represent objects (eg: A User with a number of fields like name, surname, age, and so forth):

hash 是示意对象的完满数据类型。

在学习 php 的过程中如同没怎么听过 hash,然而你肯定用过:哈希表也叫散列表,更多地被称为关联数组。

  1. 设置键域(字段)值。
  2. 为指定键设置字段值:

    • HSET key field value [field value …]
    • 从 Redis 4.0 起,HSET 能够一次设置一个或多个 field/value 对。
  3. 同时将多个 field-value (域 - 值)对设置到哈希表 key 中:

    • HMSET key field value [field value …]
  4. 获取指定键的字段或值的信息。

    • 获取所有字段和值:

      • HGETALL key
    • 获取给定字段(单个)的值:

      • HGET key field
      • 相似于 $arr[$field]
    • 获取所有给定字段的值:

      • HMGET key field [field …]
    • 获取哈希表中所有值:

      • HVALS key
      • 相似于 array_values
    • 获取给定字段的值的字符串长度:

      • HSTRLEN key field
    • 获取哈希表中字段的数量:

      • HLEN key
      • 相似于 count(array $arr)
    • 获取所有哈希表中的字段:

      • HKEYS key
      • 相似于 array_keys
  5. 删除一个或多个哈希表字段

    • HDEL key field [field …]
  6. 指定键中的字段的值的增

    • 值为整数的增量:HINCRBY key field increment
    • 值为浮点数的增量:HINCRBYFLOAT key field increment

Redis 列表 (Lists)

A list is a series of ordered values.

  1. 通过索引设置列表元素的值

    • LSET key index element
  2. 获取指定键的列表的信息:

    • 通过索引获取列表中的元素:

      • LINDEX key index
      • 相似于 $arr[1]
    • 获取列表指定范畴内的元素

      • LRANGE key start stop
    • 获取列表长度:

      • LLEN key
      • 相似于 count($arr)
  3. 删除指定键的列表的元素:

    • 移除列表元素:LREM key count element

      • count > 0: 从头到尾删除值为 value 的元素。
      • count < 0: 从尾到头删除值为 value 的元素。
      • count = 0: 移除所有值为 value 的元素。
    • 对一个列表进行修剪(trim)

      • LTRIM key start stop
      • Redis LTRIM 用于修剪 (trim) 一个已存在的 list,这样 list 就会只蕴含 指定范畴的指定元素
    • 移出并获取列表的第一个元素:

      • LPOP key
      • 相似于 array_shift(&dollar;list)
    • 移除并获取列表最初一个元素:

      • RPOP key
      • 相似于 array_pop(&dollar;list)
  4. 向指定键增加元素:

    • 将一个或多个值插入到 列表头部

      • LPUSH key element [element …]
      • 相似于 array_unshift(array,value1,value2,value3…)
    • 向存存储在 key 中的列表的尾部插入所有指定的值:

      • RPUSH key element [element …]
      • 相似于 array_push(array,value1,value2…)
    • 在列表的某个元素前或者后插入元素(定点增加):

      • LINSERT key BEFORE|AFTER pivot element

在这些个函数当中,大多数函数通过函数名就能了解其作用,然而 LTRIMLINSERT 这两个函数没接触过,还是通过一些例子来了解其性能:

LTRIM 函数的例子:

redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
// 保留索引从 1 到 -1 的元素。// 这里的 -1 能够了解为倒数第一个元素的索引。// 例如:[0=>'one',1=>'two',2=>'three'],那么 -1 就是索引 2。redis> LTRIM mylist 1 -1
"OK"
redis> LRANGE mylist 0 -1
1) "two"
2) "three"

LINSERT 函数的例子:

redis> RPUSH mylist "Hello"
(integer) 1
redis> RPUSH mylist "World"
(integer) 2
// 在 world 的后面增加 there
redis> LINSERT mylist BEFORE "World" "There"
(integer) 3
redis> LRANGE mylist 0 -1
1) "Hello"
2) "There"
3) "World"

Redis 汇合 (Sets)

A set is similar to a list, except it does not have a specific order and each element may only appear once.

从下面这段话就能够得出 set 的个性:

  • 无序性。
  • 互同性。

相较于数学中的汇合,还少了 确定性

汇合的利用场景:

In a set is very fast to test for membership, that is, to immediately know if a given element was added or not. Moreover in a set a given element can exist only in a single copy.

  1. 向指定键的汇合中增加一个或多个成员

    • SADD key member [member …]
  2. 获取指定键中汇合的信息:

    • 获取汇合的成员数:

      • SCARD key
      • 相似于 count(&dollar;arr)
    • 获取汇合中的所有成员:

      • SMEMBERS key
    • 随机获取汇合中的元素:

      • SRANDMEMBER key [count]
  3. 删除汇合中的元素:

    • 移除汇合中一个或多个成员:

      • SREM key member [member …]
    • 移除并返回汇合中的一个随机元素

      • SPOP key [count]
  4. 汇合的交并补:

    • 交加:

      • SINTER key [key …]
      • 将交加存储到 destination 汇合中:

        • SINTERSTORE destination key [key …]
    • 并集:

      • SUNION key [key …]
      • 将并集存储到 destination 汇合中:

        • SUNIONSTORE destination key [key …]
    • 补集:

      • SDIFF key [key …]
      • 将补集存储到 destination 汇合中:

        • SDIFFSTORE destination key [key …]
  5. 将某个元素从 A 汇合挪动到 B 汇合:

    • SMOVE source destination member
  6. 判断 member 元素是否是汇合 key 的成员:

    • SISMEMBER key member

Redis 有序汇合 (Sorted Sets)

Redis 有序汇合和汇合一样也是 string 类型元素的汇合,且 不容许反复的成员

不同的是每个元素都会关联一个 double 类型的分数。Redis 正是通过分数来为汇合中的成员进行从小到大的排序。

有序汇合的成员是惟一的, 但分数 (score) 却能够反复。

汇合是通过哈希表实现的,所以增加,删除,查找的复杂度都是 O(1)。

感觉有 序汇合 就是 列表 汇合 的混合体。

大多数函数在之前都遇到过,看到函数名大略就能猜到其性能,就不一一列举了。还是记录几个典型或者没遇见过的函数吧。

  1. 向有序汇合增加一个或多个成员,或者更新已存在成员的分数

    • ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member …]
  2. 返回有序汇合中指定成员的索引

    • ZRANK key member
      例子:

      redis> ZRANK myzset 'one'
      (integer) 0
      redis> ZADD myzset 1 "one"
      (integer) 1
      redis> ZADD myzset 2 "two"
      (integer) 1
      redis> ZADD myzset 3 "three"
      (integer) 1
      redis> ZRANK myzset "three"
      (integer) 2
      redis> ZRANK myzset "four"
      (nil)
      redis> ZADD myzset 5 'five'
      (integer) 1
      redis> ZRANGE myzset 0 -1
      1) "one"
      2) "two"
      3) "three"
      4) "five"
      redis> ZRANK myzset 'five'
      (integer) 3
  3. 返回有序集中,成员的分数值

    • ZSCORE key member

参考资料:

  1. redis 官网
  2. TRY REDIS
退出移动版