Redis基础
01、Redis 简介
02、Redis 安装
03、Redis 配置
04、Redis redis.conf 配置选项
05、Redis 数据类型
06、Redis 命令
07、Redis 键(key) 命令
08、Redis 字符串(String) 命令
09、Redis 哈希(Hash) 命令
10、Redis 列表(List) 命令
11、Redis 集合(Set) 命令
12、Redis 有序集合(sorted set) 命令
13、Redis HyperLogLog 命令
14、Redis 发布订阅
15、Redis 事务
16、Redis Script( 脚本 ) 命令
17、Redis 连接命令
18、Redis 服务器
19、Java 使用 Redis
20、Redis 数据备份与恢复
21、Redis 服务安全
22、Redis 性能测试
23、Redis 客户端连接
24、Redis 管道技术
25、Redis 分区
本文档使用 MrDoc 发布
-
+
首页
05、Redis 数据类型
Redis 比 Memcached 更优秀的地方之一就是支持更丰富的数据类型 ### Redis 支持七种数据类型 1、 string(字符串); 2、 hash(哈希); 3、 list(列表); 4、 set(集合); 5、 zset(sortedset:有序集合); 6、 Bitmaps(位图); 7、 HyperLogLogs(基数统计); ------------ ### String(字符串) string 是 Redis 最基本的数据类型,一个 key 对应一个 value string 类型是二进制安全的 Redis 的 string 可以包含任何数据,比如 jpg 图片或者序列化的对象 **string 类型的一个键最大能存储 512 MB 数据** ```python 127.0.0.1:6379> SET site "abcd" OK 127.0.0.1:6379> GET site "abcd" ``` 上面的范例中我们使用了 Redis 的 **SET** 和 **GET** 命令 ------------ ### Hash(哈希) Redis Hash 是一个键名对集合 Redis Hash 是一个 string 类型的 field 和 value 的映射表 Redis Hash 特别适合用于存储对象 Redis 每个 hash 可以存储 232-1 键值对(40多亿) ```python 127.0.0.1:6379> HMSET user:1 username penglei password 123456 points 200 OK 127、0.0.1:6379> HGETALL user:1 1) "username" 2) "penglei" 3) "password" 4) "123456" 5) "points" 6) "200" 127.0.0.1:6379> ``` 上面的范例中 hash 数据类型存储了包含用户脚本信息的用户对象 范例中我们使用了 Redis **HMSET**, **HGETALL** 命令, **user:1** 为键 ------------ ### List(列表) Redis List ( 列表 ) 是简单的字符串列表,按照插入顺序排序 我们可以添加一个元素到列表的头部 ( 左边 ) 或者尾部 ( 右边 ) Redis List( 列表 ) 最多可存储 232- 1 元素 (4294967295, 每个列表可存储40多亿) ```python 127.0.0.1:6379> lpush database redis (integer) 1 127.0.0.1:6379> lpush database mongodb (integer) 2 127.0.0.1:6379> lpush database rabitmq (integer) 3 127.0.0.1:6379> lrange database 0 10 1) "rabitmq" 2) "mongodb" 3) "redis" 127.0.0.1:6379> ``` ------------ ### Set(集合) Redis Set 是 string 类型的无序集合 Redis Set 是通过哈希表实现的,所以添加,删除,查找的时间复杂度都是 O(1) Redis Set 最大的成员数为 232- 1(4294967295, 每个集合可存储40多亿个成员) Redis Set 内元素具有唯一性,不管插入多少次都只会有一份 **sadd 命令** Redis sadd 添加一个 string 元素到 key 对应的 set 集合 **Redis sadd 语法** `sadd key member` **范例** ```python 127.0.0.1:6379> sadd database redis (integer) 1 127.0.0.1:6379> sadd database mongodb (integer) 1 127.0.0.1:6379> sadd database rabitmq (integer) 1 127.0.0.1:6379> sadd database rabitmq (integer) 0 127.0.0.1:6379> smembers database 1) "rabitmq" 2) "mongodb" 3) "redis" ``` 上面的范例,rabitmq 添加了两次,但最后只存储了一份 ------------ ### zset ( sorted set:有序集合 ) Redis zset 和 set 一样也是 string 类型元素的集合 Redis zset 不同的是每个元素都会关联一个 double 类型的分数 Redis zset 通过分数来为集合中的成员进行从小到大的排序 Redis zset 的成员是唯一的,但分数( score ) 却可以重复 **Redis zadd 命令** Redis zset 添加元素到集合,如果元素在集合中存在则更新对应 score **Redis zadd 命令语法格式** `zadd key score member` **Redis zset 范例** ```python 127.0.0.1:6379> zadd lang_rank 0 redis (integer) 1 127.0.0.1:6379> zadd lang_rank 0 mongodb (integer) 1 127.0.0.1:6379> zadd lang_rank 0 rabitmq (integer) 1 127.0.0.1:6379> zadd lang_rank 0 rabitmq (integer) 0 127.0.0.1:6379> ZRANGEBYSCORE lang_rank 0 1000 1) "redis" 2) "mongodb" 3) "rabitmq" ``` ------------ ### Redis Bitmap ( 位图 ) Redis Bitmap 通过类似 map 结构存放 0 或 1 ( bit 位 ) 作为值 Redis Bitmap 可以用来统计状态,如 日活,是否浏览过某个东西 **Redis setbit 命令** Redis setbit 命令用于设置或者清除一个 bit 位 **Redis setbit 命令语法格式** `SETBIT key offset value` **范例** ```python 127.0.0.1:6379> setbit aaa:001 10001 1 返回操作之前的数值 (integer) 0 127.0.0.1:6379> setbit aaa:001 10002 2 如果值不是0或1就报错 (error) ERR bit is not an integer or out of range 127.0.0.1:6379> setbit aaa:001 10002 0 (integer) 0 127.0.0.1:6379> setbit aaa:001 10003 1 (integer) 0 ``` ------------ ### HyperLogLogs ( 基数统计 ) Redis HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值 **基数** 集合中不同元素的数量,比如 {’apple’, ‘banana’, ‘cherry’, ‘banana’, ‘apple’} 的基数就是 3 **估算值** 算法给出的基数并不是精确的,可能会比实际稍微多一些或者稍微少一些,但会控制在合 理的范围之内 **HyperLogLog 的优点是** 即使输入元素的数量或者体积非常非常大,计算基数所需的空间总是固定的、并且是很小的 在Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数 这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比 因为HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素 **Redis PFADD 命令** Redis PFADD 命令将元素添加至 HyperLogLog **Redis PFADD 命令语法格式** `PFADD key element [element ...]` **范例** ```python 127.0.0.1:6379> PFADD unique::ip::counter '192.168.0.1' (integer) 1 127.0.0.1:6379> PFADD unique::ip::counter '127.0.0.1' (integer) 1 127.0.0.1:6379> PFADD unique::ip::counter '255.255.255.255' (integer) 1 127.0.0.1:6379> PFCOUNT unique::ip::counter (integer) 3 ```
李智
2025年3月17日 13:33
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码