Featured image of post Redis 基础

Redis 基础

Redis 基本语法、操作

Redis 基础

1. Redis 简介

Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。

2. Redis 安装

2.1 下载

  • Linux 安装:

2.1.1 安装依赖

1
2
3
4
5
sudo apt update # 更新软件包
sudo apt install pkg-config # 安装 pkg-config
sudo apt install libjemalloc-dev # 安装jemalloc
sudo apt install gcc # 安装gcc
sudo apt install g++ # 安装g++

2.1.2 下载 Redis

1
2
3
4
wget http://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make PREFIX=/usr/local/redis install

等待安装完成

2.2 启动 Redis

1
2
cd /usr/local/redis/bin
./redis-server

2.3 连接 Redis

1
./redis-cli

会显示如下页面:

连接 Redis

此时我们输入 ping 命令,会返回 PONG,表示连接成功。

alt text

3. Redis 基本操作

3.1 热身

3.1.1 获取符合条件的所有 key

1
keys *

glob 风格匹配规则:

  • * 匹配任意数量的字符
  • ? 匹配一个字符
  • [] 匹配括号内的任意一个字符
  • [-] 匹配括号内的任意一个字符范围
  • \x 转义字符,匹配 x 字符

3.1.2 判断 key 是否存在

我们先创建一个·名叫 bar 的 key,然后判断它是否存在:

1
set bar 1

判断是否存在:

1
exists bar

如果存在,返回 1,否则返回 0

3.1.3 删除 key

1
del bar

3.1.4 获取 key 的类型

1
2
set foo 1
type foo # 返回 string

3.2 字符串

3.2.1 设置 key 的值

set 和 get 命令用于设置和获取 key 的值:

1
2
set key hello
get key # 返回 hello

3.2.2 递增数字

1
2
set counter 100
incr counter # 返回 101

当 key 不存在时,incr 命令会将 key 的值设置为 0,然后再执行递增操作。

3.2.3 递减数字

1
decr counter # 返回 100

3.2.4 增加指定浮点数

1
2
set float 10.5
incrbyfloat float 0.1 # 返回 10.6

3.2.5 获取 key 的长度

1
2
set key hello
strlen key # 返回 5

3.2.6 同时设置/获取多个 key

1
2
mset key1 hello key2 world # 设置 key1 和 key2 的值
mget key1 key2 # 获取 key1 和 key2 的值

3.3 位操作

优点: 位操作命令可以非常紧凑地存储布尔值,节省内存,而且读取速度非常快。

语法:

1
2
3
4
5
setbit key offset value
getbit key offset
bitcount key [start end]
bitop operation destkey key1 [key2 ...]
bitpos key bit [start end]

3.3.1 设置指定偏移量的位值

1
setbit bit 7 1

注意:

  • offset 从 0 开始

3.3.2 获取指定偏移量的位值

1
getbit bit 7 # 返回 1

3.3.3 统计指定范围内的位值为 1 的个数

1
2
3
setbit bit 7 1

bitcount bit 0 0 # 返回 1

3.3.4 对一个或多个 key 进行位运算,并将结果保存到 destkey

1
2
3
4
setbit key1 7 1
setbit key2 7 1

bitop AND dest key1 key2

3.3.5 查找第一个设置为 1 或 0 的位

1
2
3
4
setbit key 7 1
setbit key 15 1

bitpos key 1 # 返回 7

3.3 哈希类型

哈希类型是一个键值对集合,适合存储对象。

语法:

1
2
3
4
5
hset key field value # 设置 key 的 field 字段的值为 value
hget key field # 获取 key 的 field 字段的值
hmset key field1 value1 field2 value2 # 设置多个 field 的值

hgetall key # 获取 key 的所有 field 和 value

3.3.1 设置哈希值

1
2
hset user name tom
hset user age 20

3.3.2 获取哈希值

1
hget user name # 返回 tom

3.3.3 设置多个哈希值

1
2

hmset user name tom age 20

3.3.4 获取所有哈希值

1
2

hgetall user # 返回 name tom age 20

3.3.5 判断字段是否存在

1
hexists user name # 返回 1

3.3.6 当字段不存在时设置值

1
hsetnx user name tom # 如果 name 字段不存在,则设置值

3.3.7 增加数字

1
2

hincrby user age 1 # 将 age 字段的值增加 1

3.3.8 删除字段

1
hdel user name # 删除 name 字段

3.4 列表类型

列表类型是一个有序的字符串链表。

3.4.1 插入元素

1
lpush list 1 2 3 4 5 # 从左边插入元素
1
rpush list 1 2 3 4 5 # 从右边插入元素

3.4.2 弹出元素

redis 执行弹出元素操作时会先将需要弹出的值删除,然后返回这个值。

1
lpop list # 从左边弹出元素
1
rpop list # 从右边弹出元素

3.4.3 获取列表中元素的个数

1
llen list # 返回列表中元素的个数

3.4.4 获取列表中指定范围的元素

语法:

1
lrange key [start] [end]
1
lrange list 0 -1 # 返回列表中所有元素

3.4.5 删除列表中的元素

1
lrem list 1 2 # 删除列表中第一个值为 2 的元素

3.4.6 设置列表中指定索引的值

1
2

lset list 0 100 # 将列表中索引为 0 的值设置为 100

3.5 集合类型

集合类型是一个无序的字符串集合。

3.5.1 添加/删除元素

1
sadd set 1 2 3 4 5 # 添加元素
1
srem set 1 # 删除元素

3.5.2 获取集合中元素的个数

1
2

scard set # 返回集合中元素的个数

3.5.3 获取集合中所有元素

1
2

smembers set # 返回集合中所有元素

3.5.4 判断元素是否存在

1
2

sismember set 1 # 判断 1 是否在集合中

3.5.5 随机获取元素

1
2

srandmember set # 随机获取一个元素

3.5.6 随机删除元素

1
2

spop set # 随机删除一个元素

3.5.7 求交集

1
2
3
4
5
6

sadd set1 1 2 3 4 5

sadd set2 3 4 5 6 7

sinter set1 set2 # 返回 3 4 5

3.5.8 求并集

1
2

sunion set1 set2 # 返回 1 2 3 4 5 6 7

3.5.9 求差集

1
2
3
4
5
6

sadd set1 1 2 3 4 5

sadd set2 3 4 5 6 7

sdiff set1 set2 # 返回 1 2

3.6 有序集合类型

有序集合类型是一个字符串成员与浮点数分值之间的映射。

3.6.1 添加元素

1
2

zadd zset 1 tom 2 jerry 3 alice # 添加元素

3.6.2 获取元素的分值

1
2

zscore zset tom # 获取 tom 的分值

3.6.3 获取元素的排名

1
2

zrank zset tom # 获取 tom 的排名

3.6.4 获取指定范围内的元素

1
2

zrange zset 0 -1 # 获取所有元素

3.6.5 删除元素

1
2

zrem zset tom # 删除 tom

3.6.6 获取元素的个数

1
2

zcard zset # 获取元素的个数

3.6.7 获取指定分值

1
2

zcount zset 1 2 # 获取分值在 1 和 2 之间的元素个数

3.6.8 获取指定范围内的元素

1
2

zrangebyscore zset 1 2 # 获取分值在 1 和 2 之间的元素
Licensed under CC BY-NC-SA 4.0