Redis 快速入门

本文最后更新于:2023年7月11日 上午

Redis 是一种基于内存的 key-value 型数据库。它的所有数据存储在内存中,所以它的读写性能非常高,同时它也是一种非关系型数据库。它通常作为 Mysql 的缓存数据库使用,提升数据库的性能。

Redis 的安装

我们从安装 Redis 开始:

  1. 下载 Redis Linux 的压缩包
  2. tar -zxvf redis.tar.gz -C /usr/local 解压 redis 到 usr/local 目录下
  3. 进入 usr/local/redis 目录下使用命令 make 编译 redis(需要安装 gcc-c++)
  4. 进入 usr/local/redis/src 使用命令,make install 安装 reids

安装完成后,使用 redis-server 即可启动,redis 的默认端口是 6379。为了便于我们的学习和使用,我们需要开放虚拟机的 6379 端口,并关闭 redis 的保护模式,以供我们在外部访问。

配置 Redis

  1. 防火墙开放端口: firewall-cmd --zone=public --add-port=6379/tcp --permanent
  2. 重启防火墙:firewall-cmd --reload
  3. 配置 redis:在 redis 的安装目录下 vim redis.conf
  4. 设置 protect-mode: no,关闭保护模式。关闭保护模式后,任何主机就可以在没有密码的情况下连接 redis了。
  5. 设置 daemonize: yes 使 redis 在后台运行。
  6. 在 redis 安装目录下加载配置文件启动 redis src/redis-server ./redis.conf

然后就可以在外部访问我们的 redis 了。

Redis 基本知识

Redis 有五种常用的数据类型:

  • 字符串 string:存储字符串,常用
  • 哈希 hash:适合村存储对象
  • 列表 list:按照插入顺序排序,元素可以重复
  • 集合 set:无序集合,元素无法重复
  • 有序集合 sorted set:有序集合,元素无法重复

1. string 常用命令

  • set key value 设置指定 key 的值,示例:set name yunfei
  • get key 获取 key 的值,示例:get name
    1
    2
    3
    4
    > set name yunfei
    OK
    > get name
    yunfei
  • setex key seconds value,设置 key 的值,并在 seconds 秒后失效,示例:set name 5 yunfei
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > setex name 5 yunfei
    OK
    > get name
    yunfei

    # 等待 5 秒

    > get name
    null
  • setnx key value,设置一个 key 的值,只在 key 不存在时成功,示例:set name yun
    1
    2
    3
    > setnx name yun
    # 0 代表失败,因为 name 已经存在
    0

2. hash 常用命令

hash 用一个 string 类型的 key,对应多个 filed -> value。就像用一个 key 对应一个 json 对象一样。它适合用于存储对象。

  • hset key filed value 设置一个 key,并设置它的 filed 和 value
    1
    2
    3
    4
    > hset 0x01 name linyun
    1
    > hset 0x01 password jdssiis.3@dd
    1
  • hget key filed 获取指定 key 中的某个 filed 的value
    1
    2
    > hget 0x01 name
    linyun
  • hdel key filed 删除某个 key 中的 filed
    1
    2
    > hdel 0x01 age
    1
  • hkeys key 获取某个 key 的全部 filed
    1
    2
    3
    > hkeys 0x01
    name
    password
  • hvals key 获取某个 key 的全部 value
    1
    2
    3
    > hvals 0x01
    linyun
    jdssiis.3@dd
  • hgetall key 获取某个 key 的全部 filed 和 value
    1
    2
    3
    4
    5
    > hgetall 0x01
    name
    linyun
    password
    jdssiis.3@dd

3. list 常用命令

list 是字符串列表,按照插入的顺序排序。list 在插入值时,从左侧插入。

  • lpush key value value2... 向 list 中插入一个或者多个值
    1
    2
    > lpush mylist first second third
    6
  • lrange key start stop 获取 list 中从 start 开始到 stop 结合的元素,当 stop 为 -1 时,表示获取全部
    1
    2
    3
    4
    5
    6
    7
    > lrange mylist 0 -1
    third
    second
    first
    aaa
    new
    c
  • rpop key,移除并获取列表中最右边的元素,也就是最早插入的元素。
    1
    2
    > rpop mylist
    c
  • llen key,获取指定 list 的长度
    1
    2
    > llen mylist
    5
  • brpop key1 [key2] timeout 移除并获取 list 中最右边的元素,如果没有就等待 timeout 秒结束,如果等待值出现就直接返回。当 list 不为空时,使用效果和rpop 基本相同
    1
    2
    3
    > brpop mylist 10
    mylist
    new

4. set 常用命令

set 是无序集合,且元素不能重复

  • sadd key member1 member2 向集合添加一个或者多个成员
    1
    2
    > sadd s m1 m2 m3
    3
  • smembers key 获取指定集合的全部元素
    1
    2
    3
    4
    > smembers s
    m3
    m2
    m1
  • scard key 获取集合的元素个数
    1
    2
    > scard s
    3
  • sinter key1 key2 返回给定集合的元素的交集
    1
    2
    3
    > sinter myset myset2
    apple
    cat
  • sunion key1 key2 返回给定两个集合元素的并集
    1
    2
    3
    4
    5
    6
    7
    > sunion myset myset2
    banana
    hourse
    apple
    perl
    dog
    cat
  • sdiff key1 key2 返回前面的集合减去后面集合剩下的元素
    1
    2
    3
    4
    5
    6
    7
    8
    > sdiff myset myset2
    dog
    perl
    hourse
    banana

    > sdiff myset2 myset

  • srem key member1 member2 移除集合中的一个或者多个元素
    1
    2
    > srem myset apple cat
    2

5. sorted set 常用命令

sorted set 和普通的 set 差别不大,只是它引入了一个 score 作为权值,从而实现对元素的排序,score 小的排在前面。

  • zadd key score1 member1 score2 member2 添加一个或者多个元素
    1
    2
    > zadd sset 10 apple 20 cat
    2
  • zrange key start stop [withscores] 按照 score 排序获取从 start 到 stop 的元素
    1
    2
    3
    > zrange sset 0 -1
    apple
    cat
  • zincrby key score member 增加元素的权值,可以为负数
    1
    2
    3
    4
    5
    6
    7
    8
    > zincrby sset -15 cat
    5

    > zrange sset 0 -1 withscores
    cat
    5
    apple
    10
  • zrem key member 移除有序集合中的一个或者多个元素
    1
    2
    > zrem sset cat
    1

总结

  • Redis 五种基本数据类型:string、list、hash、set、sorted set

redis key 的通用命令

前面的几种命令是针对特定的数据类型的,以下是一些针对 redis 中 key 的通用命令。

  • keys pattern 查找符合 pattern 的所有 key
  • exists key 检查给定 key 是否存在
  • type key 返回 key 的类型
  • ttl key 返回 key 的有效时间,单位为秒,如果为 -1 ,表示永久有效
  • del key key 存在时删除 key

Redis 快速入门
https://travelerentity.github.io/2023/Redis-快速入门/
作者
LinYun
发布于
2023年7月10日
许可协议