Redis 是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs 等数据类型。内置复制、Lua 脚本、LRU 收回、事务以及不同级别磁盘持久化功能,同时通过 Redis Sentinel 提供高可用,通过 Redis Cluster 提供自动分区。
docker 安装 redis
# 拉取 redis 镜像
docker pull redis
# 创建并运行 redis 容器
docker run -it --name redis_6379 -p 6379:6379 -d redis
# 进入容器
docker exec -it redis_6379 bash
# 连接 redis 客户端
redis-cli
# 测试 redis,输入 ping,返回 PONG 即代表成功
ping
压力测试
Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求。我们可以通过这个工具来进行简单的压测。
可选参数如下:
序号 | 选项 | 描述 | 默认值 |
---|---|---|---|
1 | -h | 指定服务器主机名 | 127.0.0.1 |
2 | -p | 指定服务器端口 | 6379 |
3 | -s | 指定服务器 socket | |
4 | -c | 指定并发连接数 | 50 |
5 | -n | 指定请求数 | 10000 |
6 | -d | 以字节的形式指定 SET/GET 值的数据大小 | 2 |
7 | -k | 1=keep alive 0=reconnect | 1 |
8 | -r | SET/GET/INCR 使用随机 key, SADD 使用随机值 | |
9 | -P | 通过管道传输 \ 请求 | 1 |
10 | -q | 强制退出 redis。仅显示 query/sec 值 | |
11 | –csv | 以 CSV 格式输出 | |
12 | -l | (L 的小写字母) 生成循环,永久执行测试 | |
13 | -t | 仅运行以逗号分隔的测试命令列表。 | |
14 | -I | (i 的大写字母) Idle 模式。仅打开 N 个 idle 连接并等待。 |
示例:
redis-benchmark -c 100 -n 10000 -t set,get -P 60 -q
数据类型
Redis 支持 5 种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及zset(sorted set:有序集合)。
String (字符串)
String 是 Redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
String 类型是二进制安全的。意思是 Redis 的 String 可以包含任何数据。比如 jpg 图片或者序列化的对象。
String 类型是 Redis 最基本的数据类型,String 类型的值最大能存储 512MB。
下面是一些 String 相关的常用命令:
序列 | 命令 | 描述 | 示例 |
---|---|---|---|
1 | set key value | 设置指定 key 的值,如果 key 不存在就自动创建 (值得类型会自动转换) | set myKey Hello |
2 | get key | 获取指定 key 的值,不存在返回 nil(null) | get myKey |
3 | mget key1 key2… | 获取一个或多个给定 key 的值 | mget name age |
4 | strlen key | 返回 key 中存储字符串的长度 | strlen myKey |
5 | incr key | 将 key 中存储的数字增 1 | incr money |
6 | decr key | 将 key 中存储的数字减 1 | decr money |
7 | setnx key value | 只有当 key 不存在时设置 key 的值(可以检测 key 是否存在,不存在返回 1,存在返回 0) | setnx lock 任意值 |
Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 String 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
下面是一些 Hash 相关的常用命令:
序列 | 命令 | 描述 | 示例 |
---|---|---|---|
1 | hdel key field1 field2… | 删除一个或多个哈希表字段 | hdel hs bmw |
2 | hexists key field | 查看哈希表 key 中,指定的字段是否存在 | hexists hs bmw |
3 | hget key field | 获取存储在哈希表中指定字段的值 | hget hs bmw |
4 | hgetall key | 获取在哈希表中指定 key 的所有字段和值 | hgetall hs |
5 | hincrby key field increment | 为哈希表 key 中的指定字段的整数值加上增量 increment | hincrby hs bmw 10 |
6 | hkeys key | 获取所有哈希表中的字段(field) | hkeys hs |
7 | hlen key | 获取哈希表中字段的数量 | hkeys hs |
8 | hmget key field1 field2 | 获取所有给定字段的值 | hmget hs audi bmw |
9 | hset key field value | 将哈希表 key 中的字段 field 的值设为 value 。 | hset hs bmw 100 audi 80 |
10 | hsetnx key field value | 只有在字段 field 不存在时,设置哈希表字段的值。 | hsetnx hs bmw 100 |
11 | hvals key | 获取哈希表中所有值 | hvals hs |
List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)。
下面是一些 List 相关的常用命令:
序列 | 命令 | 描述 | 示例 |
---|---|---|---|
1 | llen key | 获取列表长度 | llen list_1 |
2 | lpush key value1… value2 | 将一个或多个值插入到列表头部 | lpush list_1 3 2 1 |
3 | lpop key | 移出并获取列表的第一个元素 | lpop list_1 |
4 | lrange key start stop | 获取列表指定范围内的元素 | lrange list_1 0 3 |
5 | lrem key count value | 移除列表元素 | lrem list_1 0 1 |
6 | rpush key value1… value2 | 尾部添加 | rpush list_1 4 5 6 |
7 | rpop key [count] | 尾部移除 count 数量的元素 | rpop list_1 2 |
lrem key count value
命令中 count 的使用,官方说明如下:
Set(集合)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
序列 | 命令 | 描述 | 示例 |
---|---|---|---|
1 | sadd key member1 member2… | 向集合添加一个或多个成员 | sadd nums 1 2 3 |
2 | scard key | 获取集合的成员数 | scard nums |
3 | smembers key | 返回集合中的所有成员 | smembers nums |
4 | sismember key member | 判断member元素是否是集合key的成员 | sismember nums 4 |
5 | spop key | 移除并返回集合中的一个随机元素 | spop nums |
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
序列 | 命令 | 描述 | 示例 |
---|---|---|---|
1 | zadd key score1 member1 score2 member2… | 向有序集合添加一个或多个成员,或者更新已存在成员的值 | zadd stu 100 zs 99 ls |
2 | zcard key | 获取集合的成员数 | zcard stu |
3 | zcount key min max | 计算在有序集合中指定区间值的成员数 | zcount stu 90 100 |
4 | zrangebyscore key min max[limit offset count] | 通过字典区间返回有序集合的成员 | zrangebyscore stu 90 100 |
5 | zrem key member1 member2 | 移除有序集合中的一个或多个成员 | zrem stu zs ls |
6 | zremrangebyscore key min max | 移除有序集合中给定的值区间的所有成员 | zremrangebyscore stu 90 100 |
7 | zscore key member | 返回有序集合中,成员的值 | zscore stu zs |
上面列出了五种数据类型的常用命令,详细了解请查阅官方文档。
感谢大家读到这里,后续还会有其他相关文章,欢迎继续阅读。