Redis基本数据类型

Redis基本数据类型

基本数据类型

Redis支持5中数据类型,分别是:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(sorted set:有序集合)。

它们存储的值以及相应的能力如下表所示:

数据结构 读写能力
string 可以是字符串、整数或者浮点数 对整个字符串或者字符串的一部分执行操作;对整数或浮点数执行自增或者自减操作
list 一个链表,链表中的每个节点都包含了一个字符串 从立案表的两端推入或弹出元素;根据偏移量对链表进行修剪;读取单个或多个元素;根据值查找或者移除元素
set 包含字符串的无序收集器,并且被包含的每个字符串都是独一无二,各不相同的 添加、获取、移除单个元素;检查一个元素是否存在于集合中;计算交集、并集、差集;从集合里面随机获取元素
hash 包含键值对的无序散列表 添加、获取、移除单个键值对;获取所有键值对
zset 字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定 添加、获取、删除单个元素;根据分值范围或者成员来获取元素。

string-字符串

Redis的字符串就是一个由字节组成的序列。

string类型是二进制安全的,在Redis里面,string可以包含任何数据,比如jpg图片或者序列化的对象。

string类型是Redis最基本的数据类型,最大能存储512MB。

字符串可以存储下面3中类型的值:

  • 字节串
  • 整数
  • 浮点数

set

可以用命令set key value向redis设置一个key为key,value为value的字符串

设置成功之后,redis会返回OK

get

也可以使用命令get key获取对应key的值

del

使用命令del key删除key对应的值

key删除之后,再去get的话,就会返回一个nil表示找不到对应的key

incr

将对应键的值加上1

incr key-name

如果一个字符串可以被解释为十进制整数或者是浮点数,那么就可以对其使用命令incr*或者DECR*了。如果key对应的值不存在或者对应的值为空字符串,那么就会被当做整数0来处理。如果对应的字符串不能被解释为整数或者是浮点数,对其进行incr*或者decr*就会出现错误。

decr

将对应键的值减去1

decr key-name

incrby

将对应键的值加上指定的大小

incrby key-name amount

decrby

将对应键的值加上指定的大小

decrby key-name amount

incrbyfloat

将对应键的值,加上指定的浮点数大小

incrbyfloat key-name amount

append

将给定的值追加到键对应的值的末尾

append key-name value

getrange

获取字符串区间范围[start, end]之内的所有字符。

getrange key-name start end

如果start位置小于0,返回空字符串

如果end大于字符串的大小,那只返回到字符串长度的那些字符。

setrange

将从start开始的字串设置为给定的值

setrange key-name start end

getbit

将字符串看作是二进制串,并将返回串中偏移量为offset的二进制位的值

比如,’a’的ASCII码是97,二进制是01100001,那么getbit today 1返回的就是0,

getbit key-name offset

setbit

将字符串看作是二进制位串,并将位串偏移量为offset的二进制位设置为value

比如将today的第6个位(从0开始)设置为1,那么today的首字母就从a变成了c

setbit key-name offset

bitcount

统计二进制位串里面值为1的二进制位的数量,后面可以跟可选参数[start, end],表示统计该区间所有字节里面1的数量

bitcount keyname [start end]

bitop

对一个或多个二进制位串执行包括并(and)、或(or)、异或(xor)、非(not)在内的任意一种按位运算操作,并将结果保存在dest-key里面

bitop operation dest key key-name [key-name ...]

list列表

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

列表最多可以存储2^32-1个元素

lpush

将给定的值推入到列表的左边

lpush key-name value [value ...]

rpush

将给定的值推入到列表的右边

rpush key-name value [value ...]

lrange

获取列表在给定范围上的所有值

lrange key-name start end

lpop

从列表的左侧弹出一个值,并返回这个值

lpop key-name

rpop

从列表的右侧弹出一个值,并返回这个值

rpop key-name

lindex

返回列表中偏移量为offset的元素

lindex key-name offset

ltrim

对列表进行修剪,保留[start, end]之间的元素

ltrim key-name start end

blpop

从第一个非空列表中弹出位于最左端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现

blpop key-name [key-name ...]

brpop

从第一个非空列表中弹出位于最右端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现

brpop key-name [key-name ...]

rpoplpush

从source-key列表中弹出位于最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这个元素。

rpoplpush source-key dest-key

brpoplpush

从source-key列表中弹出位于最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这个元素;如果source-key为空,那么在timeout秒之内阻塞并等待可弹出的元素出现

brpoplpush source-key dest-key

set(集合)

Redis 的 Set 是 string 类型的无序集合。

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

sadd

将一个或多个元素添加到集合里面,并返回被添加元素当中原本并不存在于集合里面的元素数量

sadd key-name item [item ...]

srem

从集合里面移除一个或多个元素,并返回被移除元素的数量

srem key-name item [item ...]

sismember

检查元素item是否存在于集合key-name中

sismember key-name item

scard

返回集合包含的元素的数量

scard key-name

smembers

返回集合包含的所有元素

smembers key-name

srandmember

从集合里面随机返回一个或多个元素。当count为正数时,命令返回的随机元素不会重复,当count为负数时,命令返回的随机元素可能会重复

srandmember key-name [count]

spop

随机地移除集合中的一个元素,并返回被移除的元素

spop key-name

smove

如果集合source-key包含元素item,那么从集合source-key中移除元素item,并将元素item添加到集合dest-key中;如果item被成功移除,那么返回1,否则返回0

smove source-key dest-key item

sdiff

返回那些存在于第一个集合,但不存在于其他集合的元素

sdiff key-name [key-name ...]

sdiffstore

将那些存在于第一个集合但并不存在于其他集合中的元素,存储到dest-key中

sdiffstore dest-key key-name [key-name ...]

sinter

返回那些同时存在于所有集合中的元素

sinter key-name [key-name ...]

sinterstore

将那些同时存在于所有集合中的元素存储到dest-key中

sinterstore dest-key key-name[key-name ...]

sunion

返回那些至少存在于一个集合中的元素

sunion key-name [key-name ...]

sunionstore

将那些至少存在于一个集合中的元素存储到dest-key键里面

sunion dest-key key-name [key-name ...]

hash(哈希、散列)

hash 是一个键值(key=>value)对集合。

hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

hmget

从散列表里获取一个或多个key的值

hmget key-name key [key ...]

hmset

为散列表里面的一个或多个键设值

hmset key-name key value [key value ...]

hdel

删除散列表里面的一个或多个键值对,返回成功找到并删除的键值对数量

hdel key-name key [key ...]

hlen

返回散列表包含的键值对数量

hlen key-name

hexists

检查给定key是否存在于散列表中

hexists key-name key

hkeys

获取散列表包含的所有键

hkeys key-names

hvals

获取散列表包含的所有值

hvals key-name

hgetall

获取散列表包含的所有键值对

hgetall key-name

hincrby

将键key存储的值加上整数increment

hincrby key-name key increment

hincrbyfloat

将键key存储的值加上浮点数increment

hincrbyfloat key-name key increment

sorted set(有序集合)

zadd

将带有给定分值的成员添加到有序集合中

zadd key-name score member [score member ...]

zrem

从有序集合里面移除给定的成员

zrem key-name member [member ...]

zcard

返回有序集合包含的成员数量

zcard key-name

zincrby

将member成员的分值加上increment

zincrby key-name increment member

zcount

返回分支介于min,max之间的成员数量

zount key-name min max

zrank

返回成员member在有序集合中的排名

zrank key-name member

zscore

返回成员member的分值

zscore key-name member

zrange

返回有序集合中排名介于start和stop之间的成员,如果给定了可选的withscores选项,那么命令将会连同成员的分值也一同返回。

zrange key-name start stop [withscores]

zrevrank

返回有序自核里成员member的排名,成员按照分值从大到小排列

zrevrank key-name member

zrevrange

返回有序集合给定排名范围的成员,成员按照分值从大到小排列

zrevrange key-name start stop [withscores]

zrevrangebyscore

返回有序集合中,分值介于min和max之间的所有成员,并按照分值从大到小排列

zrevrangebyscore key max min [withscores] [limit offset count]

zremrangebyrank

移除有序集合中排名基于start和stop之间的所有成员

zremrangebyrank key-name start stop

zremrangebyscore

移除有序集合中分值基于max和min之间的所有成员

zremrangebyscore key-name max min

zinterstore

对给定的有序集合执行类似于集合的交集运算

zinterstore des-key key-count key [key ...] [weights weight [weight ...]] [aggregate sum | min | max]

zunionstore

对给定的有序集合执行类似于集合的并集运算

zunionstore des-key key-count key [key ...] [weights weight [weight ...]] [aggregate sum | min | max]

常用命令

自动过期

persist

移除键的过期时间

persist key-name

ttl

查看给定键距离过期还剩多少秒

ttl key-name

expire

让给定键在指定的秒数之后过期

expire key-name seconds

expireat

将给定键的过期时间设置为给定的unix时间戳

expireat key-name timestamp

pttl

查看给定键距离过期时间还有多少毫秒

pttl key-name

pexprie

让给定键在指定的毫秒数之后过期

pexpire key-name millseconds

pexpireat

将一个毫秒级精度的unix时间戳设置为给定键的过期时间

pexpireat key-name timestamp-millseconds

参考资料

Redis实战

Redis教程

0%