概述

​ Remote Dictionary Server(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高性能的Key-Value数据库提供了丰富的数据结构,例如String、Hash、List、Set、SortedSet等等。数据是存在内存中的,同时Redis支持事务、持久化、LUA脚本、发布/订阅、缓存淘汰、流技术等多种功能特性提供了主从模式、Redis Sentinel和Redis Cluster集群架构方案。

主流功能

  1. 分布式缓存,挡在数据库之前得到带刀护卫,可以避免频繁请求直接访问到数据库,对数造成压力
  2. 内存存储和持久化,redis支持异步将内存中的数据写到硬盘,同时不影响继续服务
  3. 高可用架构搭配(单机,主从,哨兵,集群)
  4. 缓存穿透、击穿、雪崩避免
  5. 分布式锁
  6. 队列
  7. 排行榜|点赞

优势

  1. 性能极高,redis能读的速度是110000次/秒,写的速度是81000次/秒
  2. redis数据类型丰富,不仅支持简单的key-value类型的数据,同时还提供了list、set、zse、hash等数据结构的存储
  3. redis支持数据的持久化,可以将内存中的数据保存在磁中,重启的时候可以再次加载进行使用
  4. redis支持数据大的备份,及master-slave模式的数据备份。

十大数类型

redis字符串(String)

​ string是redis最基本的类型,一个key对应一个value。

​ string类型是二进制安全的,意思似乎redis的string可以包含任何数据,比如jpg图片或者序列化的对象。

​ string类型是redis最基本的数据类型,一个redis中的字符串value最多可以是512M

常用命令

命令 说明
SET key value 设置指定 key 的值。
GET key 获取指定 key 的值。
GETRANGE key start end 返回 key 中字符串值的子字符
GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值。
SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
SETNX key value 只有在 key 不存在时设置 key 的值。
SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
STRLEN key 返回 key 所储存的字符串值的长度。
MSET key value [key value …] 同时设置一个或多个 key-value 对。
MSETNX key value [key value …] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
INCR key 将 key 中储存的数字值增一。
INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 。
INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 。
DECR key 将 key 中储存的数字值减一。
DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 。
APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。

实战案例

最常用

  1. set key value

    命令:

    1
    2
    SET key value [NX | XX] [GET] [EX seconds | PX milliseconds |
    EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]

    说明:将键key设定为指定的“字符串”值。如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。当set命令执行成功之后,之前设置的过期时间都将失效

    选项:

    • EX seconds – 设置键key的过期时间,单位时秒
    • PX milliseconds – 设置键key的过期时间,单位时毫秒
    • EXAT timestamp-seconds – Set the specified Unix time at which the key will expire, in seconds.
    • PXAT timestamp-milliseconds – Set the specified Unix time at which the key will expire, in milliseconds.
    • NX – 只有键key不存在的时候才会设置key的值
    • XX – 只有键key存在的时候才会设置key的值
    • KEEPTTL – Retain the time to live associated with the key.
    • GET – Return the old string stored at key, or nil if key did not exist. An error is returned and SET aborted if the value stored at key is not a string.

    注意: 由于SET命令加上选项已经可以完全取代SETNX, SETEX, PSETEX的功能,所以在将来的版本中,redis可能会不推荐使用并且最终抛弃这几个命令。

    返回值:如果SET命令正常执行那么回返回OK,否则如果加了NX 或者 XX选项,但是没有设置条件。那么会返回nil。

  2. get key

同时设置/获取多个值

获取指定区间范围内的值

数值增减

获取字符串长度和内容追加

分布式锁

getset(先get再set)

应用场景

redis列表

redis哈希表

redis集合

redis有序集合

redis地理空间

redis基数统计

redis位图

redis位域

redis流