转自: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