Redis的数据类型包括:String、List、Set、sorted Set、hash这样5种类型。
redis中没有使用C语言的字符串表示,而是自定义一个数据结构叫SDS(simple dynamic string)即简单动态字符串。打开下载的redis源码包,找到src下的sds.h文件查看sds源码:
struct sdshdr {
//字符串长度
unsigned int len;
//buf数组中未使用的字节数量
unsigned int free;
//用于保存字符串
char buf[];
};
c语言对字符串的存储是使用字符数组,遇到’\0’字符则认为字符串结束,redis的字符串可以存储任何类型的数据,因为任何类型数据都可以表示成二进制,sds结构中的char buf[]就是存储了二进制数据。redis的字符串是二进制安全的,什么是二进制安全?简单理解就是存入什么数据取出的还是什么数据。
redis中的sds不像c语言处理字符串那样遇到’\0’字符则认证字符串结束,它不会对存储进去的二进制数据进行处理,存入什么数据取出还是什么数据。String即最为基础的数据存储类型。可以存储字符串和二进制数据,在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
命令 描述 例子
Set 赋值 SET key value
Get 获取值 GET key
APPEND 追加字符串 APPEND key value
DECR 减少值 DECR key
INCR 增加值 INCR key
DECRBY 设置减少数值的步长 DECRBY key decrement
INCRBY 设置增加数值的步长 INCRBY key increment
GETSET 先获取值再赋值,原子性操作 GETSET key value
STRLEN 返回key的长度 STRLEN key
SETEX 设置key在服务器中存在的时间 SETEX key seconds value
SETNX Key不存在设置值,否则不做操作 SETNX key value
SETRANGE 字符串替换 SETRANGE key start "value"
GETRANGE 截取字符串 GETRANGE key start end
SETBIT 设置二进制的值 SETBIT key offset value
GETBIT 获取二进制的值 GETBIT key offset
MGET 返回多个key的值 MGET key [key ...]
MSET 设置多个key、value MSET key value [key value ...]
MSETNX Key不存在设置多个key、value值,否则不做操作 MSETNX key value [key value ...]
列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。List中可以包含的最大元素数量是4294967295。
命令 描述 例子
LPUSH 在list头部添加多个值 LPUSH key value [value ...]
LPUSHX Key存在则添加值,否则不做操作 LPUSHX key value
LRANGE 遍历list中key数据 LRANGE key start stop
LPOP 从头部弹出key中的值 LPOP key
LLEN 返回key的长度 LLEN key
LREM 删除前面几个值等于某值得元素 LREM key count value
LSET 给下标赋值 LSET key value
LINDEX 返回下标中的值 LINDEX key index
LTRIM 截取list中的值 LTRIM key start stop
LINSERT 在某个值的前面或者后面插入值 LINSERT key BEFORE|AFTER pivot value
RPUSH 在list尾部添加多个值 RPUSH key value [value ...]
RPUSHX 在list尾部添加单个值 RPUSHX key value
RPOP key 从尾部弹出值 RPOP key
RPOPLPUSH 从一个集合尾部弹出值插入到里一个集合的头部 RPOPLPUSH source destination
Set类型看作为没有排序的字符集合,Set集合中不允许出现重复的元素,redis可以在服务器端完成多个Sets之间的计算操作,如unions、intersections和differences。这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。
命令 描述 例子
SADD 添加值 SADD key member [member ...]
SMEMBERS 遍历集合 SMEMBERS key
SCARD 获取key的成员数量 SCARD key
SISMEMBER 判断成员是否存在 SISMEMBER key member
Spop 随机弹出值 Spop key
SREM 删除指定的成员 SREM key member [member ...]
SRANDMEMBER 随机返回成员,不删除原值 SRANDMEMBER key
SMOVE 移动一个集合的成员到另一个集合 SMOVE source destination member
SDIFF 求集合差集 SDIFF key [key ...]
SDIFFSTORE 集合中的差集存储到新集合中 SDIFFSTORE destination key [key ...]
SINTER 求集合交集 SINTER key [key ...]
SINTERSTORE 将集合交集存储到新集合 SINTERSTORE destination key [key ...]
SUNION 求集合并集 SUNION key [key ...]
SUNIONSTORE 将集合的并集存储到新集合 SUNIONSTORE destination key [key ...]
在集合类型的基础上有序集合类型为集合中的每个元素都关联一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。 在某些方面有序集合和列表类型有些相似。
但是,二者有着很大区别:
有序集合要比列表类型更耗内存。
命令 描述 例子 ZADD 添加排序成员 ZADD key score member [score] [member] ZCARD 获取成员数量 ZCARD key ZCOUNT 获取分数在min和max之间成员有多少个 ZCOUNT key min max ZINCRBY 增加指定成员的分数 ZINCRBY key increment member ZRANGE 遍历成员以及分数 ZRANGE key start stop [WITHSCORES] ZRANGEBYSCORE 返回分数在min和max之间的成员和分数 ZRANGEBYSCORE key min max [WITHSCORES] ZRANK 返回成员的下标 ZRANK key member ZREM 删除指定成员 ZREM key member [member ...] ZREVRANGE 遍历成员以及分数从大到小 ZREVRANGE key start stop [WITHSCORES] ZREVRANK 返回成员下标顺序从大到小 ZREVRANK key member ZSCORE 获取指定成员的分数 ZSCORE key member ZREVRANGEBYSCORE获取成员以及分数按照从高到低 ZREVRANGEBYSCORE key max min [WITHSCORES] ZREMRANGEBYRANK 删除下标之间的数据 ZREMRANGEBYRANK key start stop ZREMRANGEBYSCORE删除分数在min和max中的成员 ZREMRANGEBYSCORE key min max
hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。
命令 描述 例子 HSET 给key中filed字段赋值 HSET key field value HGET 获取key中filed的值 HGET key field HEXISTS 判断filed是否存在 0 、1 HEXISTS key field HLEN 获取key 的长度 HLEN key HDEL 删除file字段 HDEL key field [field ...] HSETNX 如果filed不存赋值否则不做操作 HSETNX key field value HINCRBY 给filed增加步长 HINCRBY key field increment HGETALL 获取所有的filed和value HGETALL key HKEYS 获取key HKEYS key HVALS 获取value HVALS key HMGET 获取所有filed字段的值 HMGET key field [field ...] HMSET 设置多个filed字段value HMSET key field value [field value ...]
命令 描述 例子 KEYS 获取所有的key KEYS pattern Del 删除指定的key DEL key [key ...] EXISTS 判断key是否存在 EXISTS key MOVE 移动一个key到另一个库中 MOVE key db RENAME 给key从新命名 RENAME key newkey RENAMENX 修改key的名字 RENAMENX key newkey PERSIST 持久化key PERSIST key EXPIRE 设置key存活时间 EXPIRE key seconds EXPIREAT 设置key存活时间(年月日) EXPIREAT key timestamp TTL 实时查看key存活时间 TTL key RANDOMKEY 随机返回一个key RANDOMKEY TYPE 查看key的中value数据类型 TYPE key SELECT 进入指定库 SELECT NUM