转自:https://www.cnblogs.com/Cloong/p/16448786.html
Redis 数据类型
Redis 有 5 种数据类型,分别为:
- String
 - Hash
 - List
 - Set
 - Sorted Set( zset )
 
String
String 是 Redis 最基本的数据类型,结构是 key,value 的形式,类似 map 集合。
String 类型是二进制安全的,可以存储序列化的数据,比如一张图片。
String类型的最大能存储 512 M。
基本语法
- set key value
 - get key
 - incr key
 - decr key
 - del key
 - setex key timeout value
 - ttl key
 - setnx key value
 
进阶语法
- incrby key num
 - mset k1 v1 k2 v2
 - mget k1 k2
 - append key 'value'
 - setrange key index value
 
Hash
Hash 类型是 String 类型的 field 和 value 的映射表,或者说是一个 String 集合。
它特别适合存储对象,相比较而言,将一个对象存储在 Hash 类型里要比存储在 String 类型里占用更少的内存空间,并方便存储整个对象。
Redis 中每个 hash 最多可以存储 2^32 - 1 键值对(40多亿)。
基本语法
- hset key hashkey hashvalue
 - hget key hashkey
 - hexists key hashkey
 - hdel key hashkey
 
进阶语法
- hincrby key hashkey
 - hlen key
 - hkeys key
 - hvals key
 - hgetall key
 - 同样有 hsetnx,其作用跟用法和 setnx 一样
 
List
Redis 中的 List 类似 Java 中的 queue,也可以当做 List 来用。
List 类型是一个链表结构的集合,其主要功能有 push,pop,获取元素等。
更详细的说,List 类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,List 的设计非常简单精巧,即可以作为栈,又可以作为队列。能满足绝大多数需求。
基本语法
- rpush key value
 - lrange key start end
 - lpush key value
 - lpop key
 - rpop key
 - llen key
 
进阶语法
- linsert key before/after refVal newVal
 - lset key index value
 - lrem key count value
 - ltrim key start end
 - lindex key index
 
Set
Set 集合是 String 类型的无序集合,Set 是通过 hashtable 实现的,对集合我们可以取交集、并集、差集,并且支持随机获取元素。
Set 集合成员是唯一的,这就意味着集合中不能出现重复的数据,如果插入重复元素,Redis 会忽略该操作。
Set 集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。
基本语法
- sadd key value
 - smembers key
 - srem key value
 - spop key count
 
进阶语法
- sdiff key1 key2
 - sdiffstore var key1 key2
 - sinter key1 key2 -> 返回两个set集合的交集
 - sinterstore var key1 key2
 - sunion key1 key2
 - sunionstore var key1 key2
 - smove key1 key2 value
 - scard key
 - sismember key value
 - srandmember key count
 
zset
zset 有序集合和 set 集合一样也是 String 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。Redis 正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。
集合中最大的成员数为 2^32 - 1 ,即每个集合最多可存储40 多亿个成员。
需要注意的是,Redis 有序集合是默认升序的,score 越低排名越靠前,即 score 越低的元素下标越小。
基本语法
- zadd key score column
 - zincrby key score column
 - zrange key start end
 - zrevrange key start end
 - zrank key name
 - zrevrank key name
 - zcard key
 
进阶语法
- zrangebyscore key min max [withscores]
 - zrevrangebyscore key max min [withscores]
 - zrem key name
 - zremrangebyscore key min max [withscores]
 - zremrangebyrank key start end
 - zcount key min max
 
使用场景
- 排序选用 zset
 - 数据是多个且允许重复选用 List
 - 数据是多个且不允许重复选用 Set
 - 其余的使用 String
 - 对象类型使用 Hash