博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis五种基本数据类型
阅读量:2161 次
发布时间:2019-05-01

本文共 2484 字,大约阅读时间需要 8 分钟。

Redis基本数据类型

Redis目前支持5种数据类型,分别是:

String(字符串)

List(列表)

Hash(字典)

Set(集合)

Sorted Set(有序集合)

下面就分别介绍这五种数据类型及其相应的操作命令。

String(字符串)

String是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字。String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。

String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。

应用场景:

String是最常用的一种数据类型,普通的key/value存储都可以归为此类,这里就不所做解释了。

redis 127.0.0.1:6379> SET mykey "redis" OK redis 127.0.0.1:6379> GET mykey "redis"

List(列表)

Redis列表是简单的字符串列表,可以类比到C++中的std::list,简单的说就是一个链表或者说是一个队列。可以从头部或尾部向Redis列表添加元素。列表的最大长度为2^32 - 1,也即每个列表支持超过40亿个元素。

 

Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

 

应用场景

Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表、粉丝列表等都可以用Redis的list结构来实现,再比如有的应用使用Redis的list类型实现一个简单的轻量级消息队列,生产者push,消费者pop/bpop。

redis 127.0.0.1:6379> LPUSH learn redis(integer) 1redis 127.0.0.1:6379> LPUSH learn mongodb(integer) 2redis 127.0.0.1:6379> LPUSH learn mysql(integer) 3redis 127.0.0.1:6379> LRANGE learn 0 101) "mysql"2) "mongodb"3) "redis"

Hash(字典)

Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。

127.0.0.1:6379>  HMSET learn name "redis tutorial" 127.0.0.1:6379>  HGETALL learn1) "name"2) "redis tutorial"3) "description"4) "redis basic commands for caching"5) "likes"6) "20"7) "visitors"8) "23000"

Set(集合)

RedisSetstring类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

redis 127.0.0.1:6379> SADD learn redis(integer) 1redis 127.0.0.1:6379> SADD learn mongodb(integer) 1redis 127.0.0.1:6379> SADD learn mysql(integer) 1redis 127.0.0.1:6379> SADD learn mysql(integer) 0redis 127.0.0.1:6379> SMEMBERS learn1) "mysql"2) "mongodb"3) "redis"

Sorted Set(有序集合)

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1) 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

redis 127.0.0.1:6379> ZADD learn 1 redis(integer) 1redis 127.0.0.1:6379> ZADD learn 2 mongodb(integer) 1redis 127.0.0.1:6379> ZADD learn 3 mysql(integer) 1redis 127.0.0.1:6379> ZADD learn 3 mysql(integer) 0redis 127.0.0.1:6379> ZADD learn 4 mysql(integer) 0redis 127.0.0.1:6379> ZRANGE learn 0 10 WITHSCORES1) "redis"2) "1"3) "mongodb"4) "2"5) "mysql"6) "4"

 

转载地址:http://lfkzb.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】53-Maximum Subarray
查看>>
【LEETCODE】215-Kth Largest Element in an Array
查看>>
【LEETCODE】241-Different Ways to Add Parentheses
查看>>
【LEETCODE】312-Burst Balloons
查看>>
【LEETCODE】232-Implement Queue using Stacks
查看>>
【LEETCODE】225-Implement Stack using Queues
查看>>
【LEETCODE】155-Min Stack
查看>>
【LEETCODE】20-Valid Parentheses
查看>>
【LEETCODE】290-Word Pattern
查看>>
【LEETCODE】36-Valid Sudoku
查看>>
【LEETCODE】205-Isomorphic Strings
查看>>
【LEETCODE】204-Count Primes
查看>>
【LEETCODE】228-Summary Ranges
查看>>
【LEETCODE】27-Remove Element
查看>>
【LEETCODE】66-Plus One
查看>>
【LEETCODE】26-Remove Duplicates from Sorted Array
查看>>
【LEETCODE】118-Pascal's Triangle
查看>>
【LEETCODE】119-Pascal's Triangle II
查看>>
【LEETCODE】88-Merge Sorted Array
查看>>
【LEETCODE】19-Remove Nth Node From End of List
查看>>