String(最基本的数据类型,二进制安全)
String是二进制安全的(不以/0作为序列化结束的标志
),也就是说redis的String可以包含任何数据类型,比如说JPG图像或者是序列化对象.String类型能存储的最大值是512MB.
String就像是Java中的Map一样,一个Key对应一个Value
基本用法:
127.0.0.1:6380> set hello world
OK
127.0.0.1:6380> get hello
"world"
127.0.0.1:6380> set counter 1
OK
127.0.0.1:6380> incr counter
(integer) 2
String底层结构
/**
* 保存字符串对象的结构
*/
struct sdshdr {
//buf 中已占用空间的长度
int len;
//buf 中剩余可用空间的长度
int free;
// 数据空间
char buf[];
};
应用场景:
- 1.计数器
- 2.对象存储(需要将对象序列化)
- 3.分布式锁
- 4.状态标记
redis的单步操作都是线程安全的,不存在线程安全问题
Hash(String元素组成的字典,适用于存储对象)
示例
127.0.0.1:6380> hmset panghu age 18 job student
OK
127.0.0.1:6380> hget panghu age
"18"
127.0.0.1:6380> hset panghu age 19
(integer) 0
127.0.0.1:6380> hget panghu age
"19"
应用场景
- 1.对象存储
List列表(按照String元素插入顺序排序)
类似于栈,先进后出,数据可重复
示例
127.0.0.1:6380> lpush mylist aaa
(integer) 1
127.0.0.1:6380> lpush mylist bbb
(integer) 2
127.0.0.1:6380> lpush mylist ccc
(integer) 3
127.0.0.1:6380> lrange mylist 0 10
1) "ccc"
2) "bbb"
3) "aaa"
127.0.0.1:6380>
应用场景:
- 消息显示排行榜
(能做与栈相关的功能)
Set(String元素组成的无序集合,通过HashTable表现,不允许重复)
示例
127.0.0.1:6380> sadd myset 111 222
(integer) 2 #返回值代表成功添加的元素
127.0.0.1:6380> sadd myset 333
(integer) 1
127.0.0.1:6380> sadd myset 111
(integer) 0
127.0.0.1:6380> smembers myset
1) "111"
2) "222"
3) "333"
应用场景
- 存储一些集合性的数据
- 获取某段时间所有数据去重值
Sorted Set(通过分数来为集合中的成员进行从大到小的排序)
具有去重的特性,还能够按照score进行排序
示例
127.0.0.1:6380> zadd myzset 3 aaa
(integer) 1
127.0.0.1:6380> zadd myzset 1 ccc
(integer) 1
127.0.0.1:6380> zadd myzset 2 bbb
(integer) 1
127.0.0.1:6380> zadd myzset 1 aaa #虽然没有成功添加,但是改变了aaa的score
(integer) 0
127.0.0.1:6380> zrangebyscore myzset 0 10
1) "aaa"
2) "ccc"
3) "bbb"
127.0.0.1:6380>
应用场景
- 带权重的队列
- 进行排名
HyperLogLog
应用场景
-计数
Geo
- 地理位置信息存储
Redis底层数据基础
1.简单动态字符串
2.链表
3.字典
4.跳跃表
5.整数集合
6.压缩列表
7.对象
参考课程:https://www.imooc.com/search/?words=%E5%89%91%E6%8C%87offer
网友评论