(本文近两万字,阅读时间可能较久,建议收藏以便查询使用)
目录
Redis诞生背景功能简介
Redis的全称是Remote Dictionary Server,翻译过来即远程字典服务,字典我们肯定就会想到经典的键值对(key-value)。它诞生于2008年Salvatore Sanfilippo之手,Salvatore Sanfilippo来自意大利的西西里岛,居住在卡塔尼亚。目前供职于Pivotal公司。他现在使用的网名是antirez。
在2008年的时候,那时候还没有非关系型数据库的出现,都是关系型数据库如最出名的MySQL等。我们都知道在对关系型数据库进行读写时,那都是对物理磁盘的一次I/O操作。在古老年代,访问量少时,它还可以拍拍胸膛说我可以。但到2008年的时候,随着LLOOGG.com所维护的网站越来越多,Redis的作者便对MySQL的性能感到了失望,于是便决定亲自为LOG量身定制一个非关系型数据库Redis并于2009年发布第一个版本。因为作者想要让更多人使用它,于是在同一年也就是2009年,作者进行了开源发布。
以上呢,我们也知道了Redis是一个开源的、构建于内存的数据结构数据库。它呢,常被用于数据存储、缓存处理和消息处理。它的操作都是原子化操作,具有简单易用的主从复制功能。支持事务处理,但是和MySQL的事务处理又有些区别。MySQL的事务处理是可以回滚的,但是Redis不支持回滚操作。当然我们知道内存存数据是不安全的,一断电内存里的数据就会全部丢失,所以Redis也支持不同级别的磁盘持久化处理策略。如果我们只是想把Redis当作一个缓存来处理的话,也可以禁用掉。同时Redis还支持哨兵和Redis Cluster提供自动分区的高可用服务。
接下来我们来看看Redis的优势:
1.极高的读写性能,每次能读的速度是110000次/秒,写的速度是81000次/秒
2.丰富的数据类型,string(字符串),hash(哈希表),list(双向链表),set(集合),zset(sorted set)(有序集合)
3.原子性操作,就是几个操作进行时,要么一起成功要么一起失败
4.支持主从热备,主从热备的意思是同时部署2台服务器实现数据同步及双机热备,如果有一个管理服务器故障了,就可以切换到备份服务器保证系统继续稳定运行,两个数据库会一直保持同步状态
5.丰富的特性,如提供了键过期功能,可以用来实现缓存。提供了发布订阅功能,可以用来实现消息系统。提供了流水线(Pipeline)功能,这样客户端能将一批命令一次性传到Redis,减少了网络的开销。同时还支持Lua脚本功能,可以利用Lua创造出新的Redis命令。提供了简单的事务功能,能在一定程度上保证事务特性。
Redis的下载与安装
Window版本
Redis本身是没有Window版本的,它的Window版本是由微软公司进行更新和维护的,当然它的版本也就自然比Linux版本要慢上很多,下面我们就是通过在Github上面的包下载。其中msi为安装包,zip则是免安装的压缩包
下载地址:Releases · tporadowski/redis · GitHub
点击下载地址我们选择这个压缩包选择下载解压
这时候打开cmd命令行窗口,cd到这个文件的目录下,然后输入
redis-server.exe redis.windows.conf
这个redis.windows.conf可以省略,省略后会启动默认的
这时候会出现这样子一个界面(千万不要关闭!!!否则访问服务端会出错)
这时候再另外开多一个cmd命令行窗口,一样cd到这个文件的目录下,输入
redis-cli.exe -h 127.0.0.1 -p 6379
然后再设置键值对测试
set EE 582
用键取出值
get EE
效果如下图:
都能正常显示后便说明我们已经成功安装了redis
Linux版本
Linux版本的话和Window的版本会比较高,原因上面也说了,接下来怎么下载呢?首先打开我们的Linux终端,切换/tmp,输入命令
(这个网址可以自己去Redis的官网选择版本下载)
wget https://download.redis.io/releases/redis-4.0.8.tar.gz
输入这个命令之后就会开始下载这个压缩包了,下载完之后我们输入命令ll可以看到有个压缩包
然后我们直接输入命令,解压压缩包
(后面的文件名根据自己情况而定)
tar zxvf redis-4.0.8.tar.gz
解压好了之后就会多出一个目录,然后我们进入到这个目录下,然后正常对于一个二进制包我们进行安装之前需要编译一下,但是Redis自己带有一个Makefire,所以我们只需要输入命令make,这个时候我们要把这个Redis安装到/usr/local下面,首先创建一个目录
mkdir /usr/local/redis
然后输入安装命令
make install PREFIX=/usr/local/redis
安装好后去到redis目录下我们可以看到一个bin文件,进去就是我们Redis的所有命令了
这个时候我们缺少了一个配置文件需要回去刚刚那里复制过来,下图框出来那个
拿过来之后,我们就可以开始启动我们的Redis服务了,输入命令
bin/redis-server redis.conf
如上图所示,这个Redis服务就已经启动成功了 ,接下来我们来测试一下Redis客户端,输入bin/redis-cli,set test 100,get test
如果结果显示都正常,就证明我们的Redis也已经安装好了
Redis键的基本操作
Redis键名查询
命令名称:KEYS
语法:KEYS pattern
pattern(翻译;模式)的用法:
? (表示匹配一个任意字符)
* (表示匹配任意个任意字符)
[be] (表示b或者e)
[^be] (表示除了b和e)
[b-e] (表示b到e)
功能:返回匹配模式的所有键名
命令名称:EXISTS
语法:EXISTS key [key...]
返回值:
1 代表存在
0 代表不存在
功能:检查给定key是否存在
命令名称:SCAN
语法:SCAN cursor [MATCH pattern] [COUNT count]
返回值:完整遍历的数据
功能:SCAN命令每次被调用之后,都会向用户返回一个新的游标,用户在 下次迭代时需要使用这个新游标作为SCAN命令的游标参数,以此来 延续之前的迭代过程
命令名称:RANDOMKEY
语法:RANDOMKEY
返回值:键名
功能:从当前数据库随机返回一个键名
Redis键的类型查询
命令名称:TYPE
语法:TYPE key
返回值:返回存储在键的值的类型的字符串表示形式。可以返回的不同类 型是:string,list,set,zset和hash
功能:查询键的类型
命令名称:OBJECT
语法:OBJECT subcommand [arguments [arguments ...]]
子命令:
OBJECT REFCOUNT <key>
OBJECT ENCODING <key>
OBJECT IDLETIME <key>
返回值:
REFCOUNT 当该键小于共享整数10000时返回一个固定值2的30次方减1,否则返 回引用次数
ENCODING 返回键的类型
IDLETIME 返回距离上次调用的时间
功能:从内部查看给定 key 的 Redis 对象
Redis键的重命名操作
命令名称:RENAME
语法:RENAME key newkey
返回值:
当 key 和 newkey 相同,或者 key 不存在时,返回一个错误
当 newkey 已经存在时, RENAME命令将覆盖旧值
改名成功时提示 OK ,失败时返回一个错误
功能:将 key 改名为 newkey
命令名称:RENAMENX
语法:RENAMENX key newkey
返回值:
当 key 不存在时,返回一个错误
当修改成功时,返回1
如果 newkey 已经存在,返回0
功能:当且仅当 newkey 不存在时,将 key 改名为 newkey
Redis键的修改最后访问时间
命令名称:TOUCH
语法:TOUCH key [key ...]
返回值:返回设置成功的键的数量
功能:修改 key 的最后访问时间为当前时间
Redis键的删除操作
命令名称:DEL
语法:DEL key [key ...]
返回值:返回删除的键的数量
功能:删除指定的键
命令名称:UNLINK
语法:UNLINK key [key ...]
返回值:返回删除的键的数量
功能:非阻塞删除指定的键
Redis键的过期操作
Redis键的过期时长的设定
命令名称:EXPIRE
语法:EXPIRE key seconds
功能:为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被 自动删除
返回值:设置成功返回 1,否则返回 0
命令名称:EXPIREAT
语法:EXPIREAT key timestamp
功能:EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置生存时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)
返回值:如果生存时间设置成功返回 1,否则返回 0
命令名称:PEXPIRE
语法:PEXPIRE key milliseconds
功能:使用方法与 EXPIRE 一致,但是时间是毫秒
返回值:设置成功返回 1,否则返回 0
命令名称:PEXPIREAT
语法:PEXPIREAT key milliseconds-timestamp
功能:使用方法与 EXPIREAT 一致,但是时间戳是毫秒
返回值:如果生存时间设置成功返回 1,否则返回 0
Redis键的过期时长的设定
命令名称:TTL
语法:TTL key
功能:以秒为单位,返回给定 key 的剩余生存时间(TTL,time to live)
返回值:
当 key 不存在时,返回 -2
当 key 存在但没有设置剩余生存时间时,返回 -1
否则,以秒为单位,返回 key 的剩余生存时间
命令名称:PTTL
语法:PTTL key
功能:以毫秒为单位,返回给定 key 的剩余生存时间
返回值:
当 key 不存在时,返回 -2
当 key 存在但没有设置剩余生存时间时,返回 -1
否则,以毫秒为单位,返回 key 的剩余生存时间
Redis键的过期时长的设定
命令名称:PERSIST
语法:PERSIST key
功能:移除给定 key 的生存时间,将这个 key 转换成持久的
返回值:
当生存时间移除成功时,返回 1
如果 key 不存在或 key 没有设置生存时间,返回 0
Redis键的序列化操作
Redis键的序列化操作
命令名称:DUMP
语法:DUMP key
功能:序列化给定 key ,并返回被序列化的值。序列化的值不包括任何生存 时间信息
返回值:如果 key 不存在,返回 nil,否则返回序列化之后的值
Redis键的反序列化及恢复操作
命令名称:RESTORE
语法:RESTORE key ttl serialized-value [REPLACE]
功能:反序列化给定的序列化值,并将它和给定的 key 关联。参数 ttl 以毫 秒为单位为 key 设置生存时间;如果 ttl 为 0,那么不设置生存时间
返回值:如果反序列化成功返回 OK,否则返回一个错误
Redis键的排序操作
命令名称:SORT
语法:SORT key [BY pattern] [LIMIT offset count] [GET pattern[GET pattern...]] [ASC|DESC] [ALPHA] [STORE destination]
功能:返回或保存给定列表、集合、有序集合 key 中经过排序的元素。排 序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较
返回值:没有使用 STORE 参数,返回列表形式的排序结果,使用 STORE 参数返回排序结果的元素数量
Redis键的迁移操作
Redis单个实例内多库间的数据迁移操作
命令名称:MOVE
语法:MOVE key db
功能:将当前数据库的 key 移动到给定的数据库 db 当中。如果当前数据库 (源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果
返回值:移动成功返回 1,失败则返回 0
Redis多个实例间的数据迁移操作
命令名称:MIGRATE
语法:MIGRATE host port key destination-db timeout [COPY] [REPLACE]
功能:将 key 原子性地从当前实例传送到目标实例的指定数据库上,一旦传 送成功, key 保证会出现在目标实例上,而当前实例上的 key 会被删 除。这个命令是一个原子性操作,它在执行的时候会阻塞进行迁移的 两个实例,直到以下任意结果发生:迁移成功,迁移失败,等待超时
返回值:迁移成功返回 OK,否则返回相应的错误
Redis字符串类型
基本概念:
String类型是 Redis 能与键关联的最简单的数据类型,它是 Memcached 当中仅有的数据类型,因此可以很快地被初学者学习。Redis的Key名称也是一个字符串,当我们使用字符串类型作为其对应的值时,我们可以根据 Key 名称来查找映射对应的值。Redis 字符串是二进制安全的,这意味着一个 Redis 字符串能包含任意类型的数据,例如:一张JPEG格式的图片或者一个序列化的Ruby对象。一个字符串类型的值最多能存储512MB的内容。
应用场景:
高速缓存HTML片段或页面,高速缓存关系型数据库查询的数据结果,高速缓存会话控制数据,分布式锁,防止重复提交,存储设置固定格式的字符串序列(例如:时间序列),统计网站访问者数量,每天注册用户数,限制API在某一时段的访问次数,用户签到,统计活跃用户,用户在线状态。
基本命令:
Redis字符串类型键的设置
命令名称:SET
语法:SET key value [EX seconds] [PX milliseconds] [NX|XX]
功能:给一个key添加字符串类型的值,如果该key已经存在,值会被新值覆 盖,不论是什么类型的key。SET设置之后的键,之前的生存时间会 被丢弃。
选项:EX seconds(生存时间:秒)/PX milliseconds(生存时间:毫秒)
NX(仅在键不存在时设置)/XX(仅在键存在时设置)
返回值:如果设置成功返回 1,否则返回 nil
命令名称:MSET
语法:MSET key value [key value ...]
功能:同时设置多个key,如果key存在会覆盖。MSET是原子的,所有键会 同时设置成功或者失败。
返回值:成功返回 1
命令名称:SETEX
语法:SETEX key seconds value
功能:给一个键设置为字符串类型,并指定生存时间(单位:秒)。该命令 是原子的,如果设置失败或者指定生存时间失败,会恢复初始状态。
返回值:如果设置成功返回OK,否则返回错误信息
命令名称:PSETEX
语法:PSETEX key milliseconds value
功能:给一个键设置为字符串类型,并指定生存时间(单位:毫秒)。该命 令是原子的,如果设置失败或指定生存时间失败,会恢复初始状态。
返回值:如果设置成功返回OK,否则返回错误信息
命令名称:SETNX
语法:SETNX key value
功能:如果key不存在,将其设置为字符串类型
返回值:如果设置成功返回 1,否则返回 0
命令名称:MSETNX
语法:MSETNX key value [key value ...]
功能:同时设置多个key,如果其中一个key存在则设置失败,不考虑其他键 是否存在。MSETNX是原子的,所有键会同时设置成功或者失败。
返回值:如果所有键设置成功返回 1,否则返回 0
命令名称:SETRANGE
语法:SETRANGE key offset value
功能:修改或者设置一个键的字符串类型值的内容。如果键不存在,就设置 一个新的,并且补充offset个NULL,再加入value,换句话说,值为 “offset个NULL+value”。如果键已经存在,从该键值offset处开始插 入value,如果offset的值大于该键字符串长度,用NULL补充到该长 度,再末尾插入value。
返回值:成功返回字符串长度,失败返回错误信息。
注意事项:offset最大值2^29-1(536870911)
命令名称:APPEND
语法:APPEND key value
功能:如果key存在,则在后面追加value的内容。如果key不存在,会创建 一个key,并设置其值为空字符串,并在后追加value的内容。
返回值:追加成功返回字符串长度。
Redis字符串类型键的查询
命令名称:GET
语法:GET key
功能:查询key的值。
返回值:如果键不存在返回nil。如果key不是String类型,返回错误信息。
命令名称:MGET
语法:MGET key [key ...]
功能:查询所有key的值。
返回值:列出所有键的值,绝不会执行失败,如果键是String类型,返回其 值,如果键不存在或者不是String类型,返回 nil。
命令名称:GETRANGE
语法:GETRANGE key start end
功能:查询一个字符串的子串,子串的内容取决于start和end(两个参数都 必需),start和end可以为负数,-1代表最后一个字符,-2代表倒数 第二个字符。
返回值:如果key存在,返回字符串的子串内容,如果key不存在,返回空字 符串,如果key不是String类型,返回错误信息。
命令名称:STRLEN
语法:STRLEN key
功能:返回key的字符串长度。
返回值:字符串长度,如果key不存在就返回0,如果不是字符串类型,返回 错误信息。
命令名称:GETSET
语法:GETSET key value
功能:原子地给一个key设置value并且将旧值返回。
返回值:如果key不是字符串类型,返回一个错误。
应用场景:获取计数器并且重置为0。
Redis字符串类型键的计数操作
命令名称:INCR
语法:INCR key
功能:将key中储存地数字值加一,如果key不存在,那么key的值会先被初 始化为 0,然后再执行 INCR 操作。本操作的值限制在 64位(bit)有符 号数字表示之内。Key的值必须是整型。
返回值:如果值包含错误的类型,或字符串类型的值不能表示为数字,返回 一个错误。如果执行成功,返回执行 INCR 命令后 key 的值。
命令名称:INCRBY
语法:INCRBY key increment
功能:将key中储存的数字值加上increment,如果key不存在,那么key的 值会先被初始化为 0,然后再执行 INCRBY 操作。本操作的值限制在 64位(bit)有符号数字表示之内。Key的值必须是整型。
返回值:如果值包含错误的类型,或字符串类型的值不能表示为数字,返回 一个错误。如果执行成功,返回执行 INCRBY 命令后 key 的值。
命令名称:INCRBYFLOAT
语法:INCRBYFLOAT key increment
功能:将key中储存的数字值加上浮点数increment,如果key不存在,那么 key的值会先被初始化为 0,然后再执行 INCRBYFLOAT 操作。可以 使用科学计数法。
返回值:如果值包含错误的类型,返回一个错误。如果执行成功,返回更新 以后的值。
命令名称:DECR
语法:DECR key
功能:将key中储存地数字值减一,如果key不存在,那么key的值会先被初 始化为 0,然后再执行 DECR 操作。本操作的值限制在 64位(bit)有符 号数字表示之内。Key的值必须是整型。
返回值:如果值包含错误的类型,或字符串类型的值不能表示为数字,返回 一个错误。如果执行成功,返回执行 DECR 命令后 key 的值。
命令名称:DECRBY
语法:DECRBY key decrement
功能:将key中储存的数字值减去decrement,如果key不存在,那么key的 值会先被初始化为0,然后再执行 DECRBY 操作。本操作的值限制在 64位(bit)有符号数字表示之内。Key的值必须是整型。
返回值:如果值包含错误的类型,或字符串类型的值不能表示为数字,返回 一个错误。如果执行成功,返回执行 DECRBY 命令后 key 的值。
Redis字符串类型键的二进制操作
命令名称:SETBIT
语法:SETBIT key offset value
功能:
对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit),位的设置或清 除取决于 value 参数,可以是 0 也可以是 1。
字符串会进行伸展(grown)以确保它可以将 value 保存在指定的偏移量上。当 字符串值进行伸展时,空白位置以 0 填充。offset参数必须大于或等于0,小于 2^32(bit 映射被限制在 512MB 之内)。
返回值:当 key 不存在时,自动生成一个新的字符串值。指定偏移量原来储 存的位。
命令名称:GETBIT
语法:GETBIT key offset
功能:对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
返回值:当 offset 比字符串值的长度大,或者 key 不存在时,返回 0 。字 符串值指定偏移量上的位(bit)。
命令名称:BITCOUNT
语法:BITCOUNT key [start] [end]
功能:计算给定字符串中,被设置为 1 的比特位的数量。一般情况下,给定 的整个字符串都会被进行计数,通过指定额外的 start 或 end 参数, 可以让计数只在特定的位上进行。
返回值:不存在的 key 被当成是空字符串来处理,因此对一个不存在的 key 进行 BITCOUNT操作,结果为 0/被设置为 1 的位的数量。
命令名称:BITOP
语法:BITOP operation destkey key [key ...]
功能:对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保 存到 destkey 上。
OPERATION:
可以是 AND、OR、NOT、XOR这四种操作中的任意一种。 除了NOT操作之外,其他操作都可以接受一个或多个 key 作为输入。
注意:
当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分 会被看作 0.空的 key 也被看作是包含 0 的字符串序列。
返回值:保存到 destkey 的字符串长度和输入 key 中最长字符串长度相等。
命令名称:BITPOS
语法:BITPOS key bit [start] [end]
功能:返回字符串里面第一个被设置为1或者0的bit位。
返回值:命令返回字符串里面第一个被设置为1或者0的bit位。如果我们在空 字符串或者0字节的字符串里面查找bit为1的内容,那么结果将返 回-1。
Redis哈希表类型
基本概念:
Redis 中的 Hash类型可以看成是具有 String key 和 String value的 map容器。该类型非常适合存储对象信息。每一个 Hash 可以存储 4294977295 个键值对。
应用场景:
会员信息;用户购物车数据。
基本命令:
Redis哈希表类型键的设置
命令名称:HSET
语法:HSET key field value
功能:将哈希表 key 中的域 field 的值设为 value。如果 key 不存在,一个 新的哈希表被创建并进行 HSET 操作。如果域 field 已经存在于哈希 表中,旧值将被覆盖。
返回值:如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1。如 果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0。
命令名称:HSETNX
语法:HSETNX key field value
功能:将哈希表 key 中的域 field 的值设为 value,当且仅当域 field 不存 在。若域 field 已经存在,该操作无效。如果 key 不存在,一个新哈 希表被创建并执行 HSETNX 命令。
返回值:设置成功返回1。如果给定域已经存在且没有操作被执行,返回0。
命令名称:HMSET
语法:HMSET key field value [field value ...]
功能:同时将多个 field-value (域-值)对设置到哈希表 key 中。此命令会覆 盖哈希表中已存在的域。如果 key 不存在,一个空哈希表被创建并执 行 HMSET 操作。
返回值:如果命令执行成功返回OK。当 key 不是哈希表(hash)类型时,返 回一个错误。
命令名称:HINCRBY
语法:HINCRBY key field increment
功能:
为哈希表 key 中的域 field 的值加上增量 increment。
增量也可以为负数,相当于对给定域进行减法操作。
如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
如果 field 不存在,那么在执行命令前,域的值被初始化为 0。
对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。
本操作的值被限制在 64 位(bit)有符号数字表示之内。
返回值:命令执行成功返回哈希表 key 中域 field 的值。否则返回一个错误。
命令名称:HINCRBYFLOAT
语法:HINCRBYFLOAT key field increment
功能:
为哈希表 key 中的域 field 的值加上浮点数增量 increment。
如果 key 不存在,一个新的哈希表被创建并执行加法操作。
如果 field 不存在,那么在执行命令前,域的值被初始化为 0。
返回值:命令执行成功返回哈希表 key 中域 field 的值。否则返回一个错误。
Redis哈希表类型键的查询
命令名称:HGET
语法:HGET key field
功能:返回哈希表 key 中给定域 field 的值。
返回值:给定域的值,若给定域或给定 key 不存在时返回 nil。
命令名称:HGETALL
语法:HGETALL key
功能:返回哈希表 key 中所有的域和值。在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两 倍。
返回值:以列表返回哈希表的域和域的值,若给定 key 不存在时返回 nil。
命令名称:HMGET
语法:HMGET key field [field ...]
功能:返回哈希表 key 中一个或多个给定域的值。
返回值:一个包含多个给定域的关联值的表,表值的排列顺序和给定域参数 的请求顺序一样,若给定域不存在时返回 nil。
命令名称:HKEYS
语法:HKEYS key
功能:返回哈希表 key 中所有域。
返回值:一个包含哈希表中所有域的表。当key不存在时,返回空表。
命令名称:HVALS
语法:HVALS key
功能:返回哈希表 key 中所有域的值。
返回值:一个包含哈希表中所有值的表。当key不存在时,返回空表。
命令名称:HEXISTS
语法:HEXISTS key field
功能:查看哈希表 key 中,给定域 field 是否存在。
返回值:如果哈希表含有给定域返回 1。否则返回 0。
命令名称:HLEN
语法:HLEN key
功能:返回哈希表 key 中域的数量。
返回值:哈希表中域的数量。当key不存在时,返回 0。
命令名称:HSTRLEN
语法:HSTRLEN key field
功能:返回哈希表 key 中给定域中的值的字符串长度(string length)。
返回值:一个整数。当给定的键或者域不存在时,返回 0。
Redis哈希表类型键的删除
命令名称:HDEL
语法:HDEL key field [field ...]
功能:删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。
返回值:被成功移除的域的数量,不包括被忽略的域。
Redis列表类型
基本概念:
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含 2^32-1个元素(4294967295,每个列表超过40亿个元素)。
应用场景:
粉丝列表;时间轴(Timeline);最新文章;消息队列。
基本命令:
Redis列表类型键的设置
命令名称:LPUSH
语法:LPUSH key value [value ...]
功能:将一个或多个值 value 插入到列表 key 的表头。如有多个 value 值, 那么各个 value 值按从左到右的顺序依次插入到表头。操作为原子性 操作,如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。
返回值:执行 LPUSH 命令后,列表的长度;如果key不是列表,返回错误。
命令名称:LPUSHX
语法:LPUSHX key value
功能:将值 value 插入到列表 key的表头,当且仅当 key存在并且是一个列 表。和 LPUSH 命令相反,当 key 不存在时,LPUSHX 什么也不做。
返回值:LPUSHX 命令执行后,列表的长度。失败返回 0。
命令名称:LINSERT
语法:LINSERT key BEFORE|AFTER pivot value
功能:将值 value 插入到列表 key 当中,位于值 pivot之前或之后。当 pivot 不存在于列表 key时,不执行任何操作。当 key 不存在时,key 被视为空列表,不执行任何操作。
返回值:如果命令执行成功,返回插入操作完成后的列表长度。如果没有找 到pivot,返回 -1.如果 key 不存在或为空列表,返回 0。
命令名称:LSET
语法:LSET key index value
功能:将列表 key 下标为 index的元素的值设置为 value。当 index 参数超 出范围,或对一个空列表进行操作时,返回错误。当 key 不存在时, key被视为空列表,不执行任何操作。
返回值:操作成功返回 OK,否则返回错误信息。
命令名称:RPUSH
语法:RPUSH key value [value ...]
功能:将一个或多个值 value 插入到列表 key 的表尾。如有多个 value 值, 那么各个 value 值按从左到右的顺序依次插入到表尾。操作为原子性 操作,如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。
返回值:执行 RPUSH 命令后,列表的长度;如果key不是列表,返回错误。
命令名称:RPUSHX
语法:RPUSHX key value
功能:将值 value 插入到列表 key的表尾,当且仅当 key存在并且是一个列 表。和 RPUSH 命令相反,当 key 不存在时,RPUSHX 什么也不做。
返回值:RPUSHX 命令执行后,列表的长度。失败返回 0。
Redis列表类型键的查询
命令名称:LINDEX
语法:LINDEX key index
功能:返回列表 key 中,下标为 index 的元素,0 为第一个元素,-1为最后 一个元素。
返回值:列表中下标为 index 的元素。如果 index 参数的值不在列表的区间 范围内(out of range),返回 nil。
命令名称:LLEN
语法:LLEN key
功能:返回列表 key 的长度。
返回值:如果 key 不存在,则 key 被解释为一个空列表,返回 0。否则返回 列表长度。
命令名称:LRANGE
语法:LRANGE key start stop
功能:返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指 定。下标(index)参数 start 和 stop 都以 0 为底。你也可以使用负数 下标,以 -1 表示列表的最后一个元素。
返回值:一个列表,包含指定区间内的元素。超出范围的下标值不会报错误
Redis列表类型键的删除
命令名称:LPOP
语法:LPOP key
功能:移除并返回列表 key 的头元素。
返回值:列表的头元素。当 key 不存在时,返回 nil。
命令名称:LREM
语法:LREM key count value
功能:根据参数 count 的值,移除列表中与参数 value 相等的元素。
count > 0:从表头开始向表尾搜索,移除与 value 相等的元素,数量 为count;count < 0:从表尾开始从表头搜索,移除与 value 相等的 元素,数量为 count 的绝对值;count = 0:移除表中所有与 value 相 等的值。
返回值:被移除元素的数量
命令名称:LTRIM
语法:LTRIM key start stop
功能:对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元 素,不在指定区间内的元素全部删除
返回值:命令执行成功时,返回 OK
命令名称:RPOP
语法:RPOP key
功能:移除并返回列表 key 的尾元素。
返回值:列表的尾元素。当 key 不存在时,返回 nil。
命令名称:RPOPLPUSH
语法:RPOPLPUSH source destination
功能:命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:将列表 source中的最后一个元素(尾元素)弹出,并返回给客户端;将 source 弹出的元素插入到列表 destination,作为 destination列表的头元 素。
返回值:被弹出的元素
Redis列表类型键的阻塞式操作
命令名称:BLPOP
语法:BLPOP key [key ...] timeout
功能:BLPOP是列表的阻塞式(blocking)弹出原语,LPOP 命令的阻塞版 本,当给定列表内没有任何元素可供弹出时,连接将被 BLPOP 命令 阻塞,直到等待超时或发现可弹出元素为止。
返回值:被弹出的元素
命令名称:BRPOP
语法:BRPOP key [key ...] timeout
功能:BRPOP 除了弹出元素是从表尾以外,其他表现与 BLPOP 一致。
返回值:假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时 长。反之,返回一个含有两个元素的列表,第一个元素是被弹出元 素所属的 key,第二个元素是被弹出元素的值。
命令名称:BRPOPLPUSH
语法:BRPOPLPUSH source destination timeout
功能:BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本,当给定列表 source 不为空时,BRPOPLPUSH 的表现和 RPOPLPUSH 一样。当列表 source 为空时,BRPOPLPUSH 命令将阻塞连接,知道等待超时, 或有另一个客户端对 source 执行 LPUSH 或 RPUSH 命令为止。超 时参数 timeout 接受一个以秒为单位的数字作为值。超时参数设为 0 表示阻塞时间可以无限期延长(block indefinitely)。
返回值:假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时 长。反之,返回一个含有两个元素的列表,第一个元素是被弹出元 素的值,第二个元素是等待时长。
Redis集合类型
基本概念:
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。集合中最大的成员数为 2^32 - 1(4294967295,每个集合可存储40多亿个成员)。
应用场景:
共同好友;好友推荐。
基本命令:
Redis集合类型键的设置
命令名称:SADD
语法:SADD key member [member ...]
功能:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合 的 member 元素将被忽略。假如 key 不存在,则创建一个只包含 member 元素作为成员的集合。当 key 不是集合类型时,返回一个错 误。
返回值:被添加到集合中的新元素数量,不包括被忽略的元素。
Redis集合类型键的查询
命令名称:SCARD
语法:SCARD key
功能:返回集合 key 的基数(集合中元素的数量)。
返回值:集合的基数。当 key 不存在时,返回 0 。
命令名称:SMEMBERS
语法:SMEMBERS key
功能:返回集合 key 中的所有成员。不存在的 key 被视为空集合。
返回值:集合中的所有成员。
命令名称:SISMEMBER
语法:SISMEMBER key member
功能:判断 member 元素是不是集合 key 的成员。
返回值:如果是,返回 1。如果不是,或 key 不存在,返回 0。
命令名称:SRANDMEMBER
语法:SRANDMEMBER key [count]
功能:如果命令执行时,只提供了key参数,那么返回集合中一个随机元素。
返回值:只提供 key 参数时,返回一个元素。如果集合为空,返回 nil。
命令名称:SSCAN
语法:SSCAN key cursor [MATCH pattern] [COUNT count]
功能:用于迭代集合键中的元素。
返回值:集合中的成员。
Redis集合类型键之间的关系
命令名称:SDIFF
语法:SDIFF key [key ...]
功能:返回一个集合的全部成员,该集合是所有给定集合之间的差集。不存 在的 key 被视为空集。
返回值:一个包含差集成员的列表。
命令名称:SDIFFSTORE
语法:SDIFFSTORE destination key [key ...]
功能:这个命令的作用和 SDIFF 类似,但它将结果保存到 destination 集 合,而不是简单地返回结果集。如果 destination 集合已经存在,则 将其覆盖。destination 可以是 key 本身。
返回值:差集成员的数量。
命令名称:SINTER
语法:SINTER key [key ...]
功能:返回一个集合的全部成员,该集合是所有给定集合的交集。不存在的 key 被视为空集。当给定集合当中有一个空集时,结果也为空集(根据 集合运算定律)。
返回值:交集成员的列表。
命令名称:SINTERSTORE
语法:SINTERSTORE destination key [key ...]
功能:这个命令的作用和 SINTER 类似,但它将结果保存到 destination 集 合,而不是简单地返回结果集。如果 destination 集合已经存在,则 将其覆盖。destination 可以是 key 本身。
返回值:结果集成员的数量。
命令名称:SUNION
语法:SUNION key [key ...]
功能:返回一个集合的全部成员,该集合是所有给定集合的并集。不存在的 key 被视为空集。当给定集合当中有一个空集时,结果也为空集(根据 集合运算定律)。
返回值:并集成员的列表。
命令名称:SUNIONSTORE
语法:SUNIONSTORE destination key [key ...]
功能:这个命令的作用和 SUNION 类似,但它将结果保存到 destination 集 合,而不是简单地返回结果集。如果 destination 集合已经存在,则 将其覆盖。destination 可以是 key 本身。
返回值:结果集成员的数量。
Redis集合类型键的删除
命令名称:SPOP
语法:SPOP key
功能:移除并返回集合中的一个随机元素。
返回值:被移除的随机元素。当 key 不存在或者是空集时,返回 nil
命令名称:SREM
语法:SREM key member [member ...]
功能:移除集合 key 中的一个或多个 member 元素,不存在的 member 元 素会被忽略。当 key 不是集合类型,返回一个错误。
返回值:被成功移除的元素的数量,不包括被忽略的元素。
命令名称:SMOVE
语法:SMOVE source destination member
功能:将 member 元素从 source 集合移动到 destination 集合。SMOVE 是原子性操作。如果 source 集合不存在或不包含指定的 member 元 素,则 SMOVE 命令不执行任何操作,仅返回 0。当 destination 集 合已经包含 member 元素时,SMOVE命令只是简单地将 source 集 合中的 member 元素删除。
返回值:如果 member 元素被成功移除,返回 1。如果 member 元素不是 source 集合的成员,并且没有任何操作对 destination 集合执 行,那么返回 0。当 source 或 destination 不是集合类型时,返 回一个错误。
Redis有序集合类型
基本概念:
Redis 有序集合和集合一样,也是 String 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。Redis 正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合中最大的成员数为 2^32 - 1(4294967295,每个集合可存储40多亿个成员)
应用场景:
排行榜。