Redis是一个开源的、高性能的、基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同场景下的缓存与存储需求。

安装Redis

Redis兼容大部分POSIX系统,包括Linux、OS X和BSD等。在Windows下可以通过Cygwin或虚拟机进行安装。

下载最新稳定版(此版本号为偶数的是稳定版本)后解压即可使用make命令完成编译。
wget http://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make
Redis没有其他外部依赖,安装过程简单,编译后在Redis源代码目录的src文件夹中可以找到若干个可执行程序,最好在编译后直接执行make install命令来将这些可执行程序复制到/usr/local/bin目录中以便以后执行程序时可以不用输入完整的路径。

在实际运行Redis前推荐使用make test命令测试Redis是否编译正确。

如果make test时出错,提示You need 'tclsh8.5' in order to run the Redis test

安装新版本的tcl,命令(不带-y时需要进行若干次输入y进行确认)
yum install -y tcl
权限不足可能需要使用sudo

------------------------------------------------------------------------------------------------------------------

redis最常使用的两个程序是redis-server和redis-cli,其中redis-server是redis的服务器,redis-cli(Redis Command Line Intergface)是redis自带的redis命令行客户端。redis不区分命令大小写。

Redis的启动与停止

启动redis服务有两种方式:直接启动和初始化脚本启动

1.直接启动,运行redis-server即可启动,十分简单,启动界面如图

2.通过初始化脚本启动,使得redis能随系统自动运行,在生成环境中推荐使用此方法。

redis源代码目录的utils文件夹中有一个名为redis_init_script的初始化脚本文件。需要根据脚本作适当的配置。

关闭redis

考虑到redis有可能正在将内存中的数据同步到硬盘中,强行终止redis进行可能导致数据丢失,正确停止redis的方式是向redis发送shutdown命令。

redis-cli shutdown
当redis收到shutdown命令后,会先断开所有客户端连接,然后根据配置执行持久化,最后完成退出。redis可以妥善处理SIGTERM信号,所以使用kill redis进程的pid也可以正常结束redis,效果与发送shutdown命令一样。

发送命令
通过redis-cli向redis发送命令有两种方式,第一种方式是将命令作为redis-cli的参数执行。
redis-cli执行时会自动按照默认配置(服务器地址为127.0.0.1,端口号为6379)连接redis,通过-h和-p参数可以自定义地址和端口号:

$ redis-cli -h 127.0.0.1 -p 6379
redis提供了ping命令来测试客户端与redis的连接是否正常,如果连接正常会收到回复pong。

第二种方式是不附带参数运行redis-cli,这样会进入交互模式。

redis是一个字典结构的存储服务器,它提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中,与关系数据库实例中可以创建多个数据库类似,可以将每个字典都理解成一个独立的数据库。每个数据库都是以一个从0开始的递增数字命名,redis默认支持16个数据库,可以通过配置参数databases来修改。客户端与redis建立连接后会自动选择0号数据库,可以使用select命令更换数据库。如要选择1号数据库:select 1


------------------------------------------------------------------------------------------------------------------

基础命令:
获得符合规则的键名列表:KEYS pattern
pattern支持使用通配符:?(匹配一个字符)、*(匹配任意个字符)、[](匹配括号中的任1个字符)、\x(匹配字符x,用于转义)


判断一个键是否存在:EXISTS key
如果键存在则返回整数类型1,否则返回0


删除键:DEL key [key...]
可以删除一个或多个键,返回值是删除的键的个数.

第二次执行del命令时因为bar键已经被删除了,实际上并没有删除任何键,所以返回0.

获得键值的数据类型:TYPE key
type命令的返回值可能是string(字符串类型)、hash(散列类型)、list(列表类型)、set(集合类型)、zset(有序集合类型).


------------------------------------------------------------------------------------------------------------------

字符串类型(string)类型是Redis中最基本的数据类型,可以存储任意形式的字符串,包括二进制数据。字符串类型是其他4种数据类型的基础。其他四种数据类型都是由字符串类型所组成的。
SET key value 赋值
GET key 取值,当键不存在时,返回空,即(nil)
INCR key 递增数字,当字符串是整数形式时,可以让当前键的值递增,返回值是递增后的值,当要操作的键不存在时会默认键值为0,所以第一次递增后的结果是1.当键值不是整数时redis会提示错误.
INCRBY key increment 增加指定的整数
DECR key decrement 减少指定的整数
INCRBYFLOAT key increment 增加指定的浮点数
APPEND key value 向尾部追加值
STRLEN key 获取字符串长度
MGET key [key...] 同时获得多个键值
MSET key value [key value] 同时设置多个键值
位操作
getbit key offset
setbit key offset value
bitcount key [start] [end]
bitop operation destkey key [key...]
散列类型
(hash)是一个string类型的field和value的映射表。它的添加,删除操作平均复杂度都是O(1)。hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型,将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。

散列类型适合存储对象,使用对象类别和id构成键名,使用字段表示对象的属性,而字段值则存储属性值.


HSET key field value 给字段赋值,若key不存在则会自动创建
HGET key field 获得字段的值
HMSET key field value [field value...] 同时设置多个字段的值
HGET key field [field...] 同时获得多个字段的值
HSETNX key field value 当字段不存在时赋值,如果字段已经存在则不执行任何操作

HDEL key field [field...] 删除字段
HEXISTS key field 判断一个字段是否存在,如果存在返回1,否则返回0(如果键不存在也返回0).
HINCRBY key field increment 增加数字,返回值是增值后的字段值

HGETALL key 获取键中所有字段和字段值
HKEYS key 获取键中所有的字段的名字
HVALS key 获取键中所有的字段值
HLEN key 获取字段数量

列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素或获得列表的某一个片段.list内部使用双向链表实现,所向列表两端添加元素时间复杂度为O(1).
LPUSH key value [value...] 向列表左边添加元素,返回值表示增加元素后列表的长度,LPUSH number 2 3会先向列表左边加入2,然后再加入3,即后面加入的在更左边
RPUSH key value [value...] 向列表右边添加元素
LPOP key 从列表左边弹出一个元素,其操作分两步:首先将列表左边的元素从列表中移除,然后返回被移除的元素值
RPOP key 从列表右边弹出一个元素
LLEN key 获取列表中元素的个数,若键不存在则返回0
LRANGE key start stop 返回索引从start到stop之间的所有元素(包括两端的元素),列表起始索引为0.当索引为负数时表示从右边开始计算,-1表示最右边第一个元素.即lrange key 0 -1将返回列表所有元素.
特殊情况:1.若start的索引位置比stop的索引位置靠后,则返回空列表 2.若stop大于实际索引范围,则会返回到列表最右边的元素.
LREM key count value 删除表中前count个值为value的元素,返回值是实际删除的元素个数.
1.当count>0时lrem命令会从列表左边开始删除前count个值为value的元素.
2.当count<0时lrem命令会从列表右边开始删除前|count|个值为value的元素.
3.当count=0时lrem命令会删除所有值为value的元素

LINDEX key index 返回指定索引的元素,索引从0开始,如果index是负数则表示从右边开始计算的索引,最右边是-1.
LSET key index value 设置指定索引的元素值
LTRIM key start end 删除指定索引范围之外的所有元素,其指定范围的方法和LRANGE命令相同.
LINSERT key BEFORE|AFTER pivot value 该命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面
RPOPLPUSH source destination 将元素从一个列表转到另一个列表

集合类型(set)的常用操作是向集合中加入或删除元素、判断某个元素是否存在.由于集合类型在Redis内部是使用值为空的散列表实现的,所以这些操作的时间复杂度都是O(1).集合类型键之间可以进行并集、交集和差集运算.
SADD key member [member...] 向集合中增加一个或多个元素,如果键不存在则自动创建.集合中不能有相同的元素,如果要加入的元素已经存在则忽略该元素.本命令返回值是成功加入的元素数量(忽略的元素不计算在内).
SREM key member [member...] 从集合中删除一个或多个元素,并返回删除成功的元素个数.

SMEMBERS key 返回集合中的所有元素
SISMEMBER key member 判断元素是否在集合中.当值存在时返回1,当值不存在或键不存在时返回0.
集合间运算
SDIFF key [key...] 差集
SINTER key [key...] 交集
SUNION key [key...] 并集
SCARD key 获得集合中元素的个数

SDIFFSTORE destination key [key...] 和SDIFF命令功能一样,唯一区别是会将结果存储在destination键中
SINTERSTORE destination key [key...]
SUNIONSTORE destination key [key...]

SRANDMEMBER key [count] 随机从集合中获取一个(count个)元素
当count为正,随机从集合中获得count个不重复的元素,若count值大于集合中元素个数,则返回全部元素
当count为负,随机从集合中返回|count|个的元素,这些元素有可能相同
需要注意的是SRANDMEMBER命令返回的数据并不是非常随机.Redis使用拉链法解决散列冲突.随机获取元素时首先从所有桶中随机选择一个,然后从桶中随机选择一个元素.所以元素所在桶中元素数量越少其被随机选择概率越大.
SPOP key 从集合中随机弹出一个元素(返回元素的值并删除它)

有序集合(sorted set)类型是在集合的基础上为集合中的每个元素都关联了一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在等集合类型支持的操作,还能获得分数最低或最高的前N个元素、获得指定分数范围内的元素等与分数有关的操作.虽然集合中每个元素都是不同的,但是它们的分数可以相同.
有序集合类型使用散列表和跳跃表实现,即使读取位于中间部分的数据速度也很快(时间复杂度O(logN)).
ZADD key score member [score membere...] 向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数.其返回值是新加入到集合中的元素的个数(不包含之前已经存在即使修改了其分数的元素)
ZSCORE key member 获得元素的分数

ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]

获得排名在某个范围的元素列表.ZRANGE命令会按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素).ZRANGE与LRANGE命令相似,如索引都是从0开始,负数表示从后向前查找(-1表示最后一个元素).如果需要同时获得元素的分数可以在ZRANGE命令尾部加上WITHSCORES参数,这时返回的数据格式就从"元素1,元素2,...,元素n"变成了"元素1,分数1,元素2,分数2,...,元素n,分数n".如果两个元素的分数相同,Redis会按照字典顺序排序.ZREVRANGE命令和ZRANGE的唯一不同在于ZREVRANGE命令是按照元素分数从大到小的顺序给出结果.

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 该命令按照元素分数从小到大的顺序返回分数在min和max之间(包含min和max)的元素.如果希望分数范围不包含端点值,可以在分数前加上"("符号,如希望返回80分到100分的数据,可以包含80分但不包含100分:ZRANGEBYSCORE scoreboard 80 (100 . min和max还支持无穷大,-inf和+inf分别表示负无穷和正无穷.命令中的LIMIT offset count与SQL中用法类似,即在获得的元素列表的基础上向后偏移offset个元素,并且只获取前count个元素.

ZINCRBY key increment member 增加某个元素的分数,返回值是更改后的分数.
ZCARD key 获得集合中元素的数量
ZCOUNT key min max 获得指定分数范围内的元素个数
ZREM key member [member...] 删除一个或多个元素,返回值是成功删除的元素数量(不包含本来就不存在的元素)
ZREMRANGEBYRANK key start stop 按照排名范围删除元素.按照元素分数从到大的顺序删除处在指定排名范围内的所有元素,并返回删除的元素数量
ZREMRANGEBYSCORE key min max 按照分数范围删除元素.删除指定分数范围内的所有元素,返回删除的元素数量
获得元素的排名
ZRANK key member 按照元素分数从小到大的顺序获得指定的元素的排名(从0开始即分数最小的元素排名为0)
ZREVRANK key member 与ZRANK相反,分数最大的元素排名为0

ZINTERSTORE destination numkeys key [key...] [WEIGHTS weight [weight...]] [AGGREGATE SUM|MIN|MAX]
计算多个有序集合的交集并将结果存储在destination键中,返回值为destination键中的元素的个数.
destination键中元素的分数由AGGREGATE参数决定.
当AGGREGATE是SUM时,destination键中元素的分数是每个参与计算的集合中该元素分数的和
当AGGREGATE是MIN时,destination键中元素的分数是每个参与计算的集合中该元素分数的最小值
当AGGREGATE是MAX时,destination键中元素的分数是每个参与计算的集合中该元素分数的最大值
ZINTERSTORE还能通过WEIGHTS参数设置每个集合的权重,每个集合在参与计算时元素的分数会被乘上该集合的权重.


Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐