Redis的数据类型即应用场景

2019-08-26  本文已影响0人  叫我胖虎大人

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[];
};

应用场景:

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"

应用场景

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

上一篇 下一篇

猜你喜欢

热点阅读