1、Redis的发展史
Redis[Remote Directory Server]:远程服务器字典
2、Redis的安装
2.1、linux下安装Redis
wget http://download.redis.io/releases/redis-3.2.6.tar.gz
tar xzf redis-3.2.6.tar.gz
cd redis-3.2.6/
Make
Make install
2.2、在bin下可执行的程序
Redis-server: Redis服务器
Redis-cli: 命令行客户端
Redis-benchmark: Redis的性能测试工具
Redis-check-aof: AOF文件修复工具
Redis-check-dump: RDB文件检测工具
Redis.conf: Redis的配置文件
将配置文件中daemonize yes 以守护进程的方式来使用
2.3、启动和停止Redis
直接启动
redis-server
redis-server /etc/redis.conf
停止Redis
Shutdown
结束Redis的进程
3、命令返回值
1)状态回复
2)错误回复
3)整数回复
4)字符串回复
5)多行字符串回复
KEYS * 得到当前数据库中存在的键名
4、Redis配置选项相关内容
1)动态设置/获取配置选项的值
CONFIG GET name
CONFIG SET name value
2)Redis配置文件redis.conf选项相关
Port 6379 默认端口
Bind 127.0.0.1, 默认绑定的主机地址
Timeout 0, 当客户端闲置多久之后关闭连接,0代表没有启动
Loglevel notice, 日志的级别
Logfile stdout, 日志的记录方式,默认为标准输出
Datebase 16,默认数据库的数量16个,默认的数据库编号从0开始
Save <second> <change>, 多少秒有多少次改变将其同步到磁盘中的数据文件里
Save 900 1
Save 300 10
Save 60 10000
Rdbcompression yes, 存储本地数据库时是否启用压缩,默认yes
Dbfilename dump.rdb, 指定本地数据库文件名,默认dump.rdb
Dir ./, 指定本地数据库的存放目录,默认是当前目录
5、Redis的数据类型
String字符串类型
一个键最多存储512MB
SET 语法: SET key value [EX seconds] [PX milliseconds] [NX|XX]
如果key存在,同名会产生覆盖
GET:根据key找到对应的值 语法:GET key
如果key不是字符串,会报错
如果key不存在,返回nil
GETRANGE: 返回字符串中一部分 语法: GETRANGE start end
GETSET: 设置指定key的值,并且返回旧的值 语法: GETSET key value
当key不存在返回nil,如果key不是字符串,会报错
MSET, 语法:MSET key vakue [key value…]
MGET,语法:MGET key key
STRLEN: 获取key的字符串长度 语法: STRLEN key 注意:对于不存在key获取其长度返回0
SETRANGE:相当于字符串替换的效果 语法: SETRANGE key offset value 注意:如果设置的key原来的字符串长度要比偏移量小,就会以零字节(\x00)填充
对不存在的key使用SETRANGE,返回零字节(\x00)填充
GETRANGE
SETNX: 语法: SETNX key value 只有key不存在才能设置成功
SETEX: 设置key并key的过期时间 语法: SETEX secondsvalue 注意:SETEX是原子性操作,相当于执行了SET keyvalue,又对ke设置了过期时间EXPIRE key seconds
MSETNX: 一次设置多个key-value对,只有所有的key都不存在的时候才能设置成功 语法: MSETNX key value [key value…]
PSETEX: 以毫秒为单位设置key的生存周期 语法: PSETEX key milliseconds value 返回毫秒数PTTL
INCR: 对key中存储的数字+1 语法:INCR key 注意:key如果不存在,则会先初始化为0,再进行INCR操作, 如果key存储的不是数字,会报错
INCRBY: 将key中存储的数字加上指定增量 语法:INCRBY key increment
INCRBYFLOAT: 给key中存储的数字加上指定的浮点数
DECR: 将key中存储的数字减1 语法: DESC KEY
DECRBY: 将key中存储的数值减去指定的值 DESCBY key increment
APPEND: 通过APPEND将值追加到字符串的末尾 APPEND key value 如果key不存在,则相当于执行了SET操作
Hash类型
在配置文件中可以通过配置
Hash-max-ziplist-entries 512 512字节
Hash-max-ziplist-value 64 字段数目
HSET: 将哈希表key中域field设置成指定的value 语法:HSET key field value
HGET: 返回哈希表key中指定field的值 如果key中field不存在,返回nil
HSETNX:将hash表中的field设置成指定的值,只要field不存在的时候才可以成功;如果field存在,操作无效
HSETNX key field value
HMSET: 通过将多个field-value设置到hash表key中 语法:HMSET key field value field value …
HMSET:一次获得hash表key中对多个field值 语法:HMSET key field field 注意: 如果hash表key中field不存在,会返回nil
HGETALL: 返回hash表key中所有的field和value 语法: HGETALL key
HKEYS:返回hash中key的所有的field 语法:HKEYS key
HVALS:返回hash中key中filed所有对应的值 语法:HVALS key
HEXISTS:检测hash中key的field是否存在 语法: HEXISTS key field
HLEN:返回hash表key中field的数量 语法:HLEN key
HINCRBY: 给hash中key的field做增量操作 语法: HINCRBY key field increment
HINCRBYFLOAT: 给hash中key的field做增量浮点操作 语法:HINCRBYFLOAT key field increment
HDEL:删除hash中key的指定field,可以删除一个也可以删除多个 语法: HDEL key field field
List类型
LPUSH: 向列表左端添加元素
RPUSH:向列表右端添加元素
LPUSHX:向列表头部添加元素,只有key存在才添加
PPUSHX:向列表尾部添加元素,只有key存在才添加
LPOP
RPOP
LRANGE:获取列表片段 语法:LRANGE key start stop
注意:如果start下表比列表的最大下标end大,返回的空列表;如果stop比列表长度大,返回到列表的末尾
LREM:删除列表中指定的值 语法:LREM key count value
count值有以下几种:
Count>0,从列表的头开始,向尾部搜索,移除与value相等的元素,移除count个;
Count<0:,从列表尾部向头搜索,移除与value相等的元素,移除count个
Count=0:移除列表中所有与value相等的值
LINDEX: 获得指定索引元素的值 LINDEX key index
LSET:设置指定索引元素的值 语法:LSET key index value
LTRIM: 只保留列表的片段 语法:LTRIM keystart stop
LINSERT:向列表插入元素 语法:LINSERT keyBEFORE|AFTER pivot value
RPOPLPUSH:将元素从一个列表转到另一个列表
BLPOP:是LPOP的阻塞版本 语法: BLPOP key[key…] timeout
Set类型
SADD:像集合中添加元素 语法:SADD key member [,…]
SMEMBERS:返回指定集合中的元素 语法:SMEMBERS key
SISMEMBER:检测value是否是集合中的成员 语法:SISMEMBER key value
SREM:删除集合中的一个或者多个成员 语法:SREM key member [member…]
SPOP:删除并返回集合中的随机元素 语法: SPOP key
SRANDMEMBER:随机返回结合中的元素 SRANDMEMBER key count
count为正数,而且小于集合中的元素个数,返回的是一个包含随机元素的集合数组;
count大于集合中元素的个数,返回整个集合;
count为负数,返回一个数组,数组中的成员可能出现重复,数组的长度是count的绝对值
SDIFF:返回集合间的差集 语法: SDIFF key key …
SINTER:返回集合间的交集 语法:SINTER key key …
SUNION:返回集合间的并集 语法: SUNION key key …
SCRAD:返回集合中元素的个数 SCRAD key
SDIFFSTORE:将差集结果保存到指定集合中 SDIFFSTORE destination key key …
SINTERSTORE
SUNIONSTORE
SMOVE:将集合中元素移动另外一个集合中 SMOVE source destination member
Zset类型
ZADD:将元素及其分数添加到集合中 语法: ZADD key score member [score member]
ZADD key +inf maxInt -inf minInx
ZSCORE:获得指定元素的分数 ZSCORE key member
ZRANGE:按照元素分数从小到大的顺序返回指定索引start到stop之间所有元素(包含两端) ZRANGE key start stop[WITHSCORES]
当两个元素的分数相同时,Redis在排序时按照字段顺序(0<9<A<Z<a<z),如果使用的是UTF-8的编码方式的中文同样按照字典顺序排列
ZREVRANGE:和ZRANGE相反,按照分数从大到小的顺序 ZREVRANGE key start stop [WITHSCORES]
ZRANGEBYSCORE:获得指定分数范围内的元素,按照分数从小到大的熟悉怒,返回的是分数在指定的min到max的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZRANGEBYSCORE PHPScore 80 90 WITHSCORES 包含80、90
ZRANGEBYSCORE PHPScore (80 (90 WITHSCORES 不包含80、90
ZREVRANGEBYSCORE:获得指定分数范围内的元素,按照元素的分数从大到小的顺序返回min和max之间的元素
ZREVRANGEBYSCORE keymax min [WITHSCORES] [LIMIT offset count]
ZINCRBY:操作某个元素的分数,返回操作之后的分数 ZINCRBY key increment member
ZCARD:获得集合中元素的数量 ZCARD key
ZCOUNT: 获得指定分数内的元素数量
ZREM:删除一个或多个元素,返回删除元素的个数 ZREM key member …
ZREMRANGEBYRANK:按照排名范围删除元素,按照分数从小到达的顺序删除所指定的排名范围的所有元素
ZREMRANGEBYRANK key start stop
ZREMRANGEBYSCORE:按照分数范围删除元素 ZREMRNAGEBYSCORE key min max
ZRANK:获得指定元素的排名,根据分数从小到大的顺序 ZRANK key member
ZREVRANK:获得指定元素的排名,根据分数从大到小的顺序 ZRANK key member
ZINTERSTORE:计算有序集合的交集,并将结果保存起来
ZINTERSTORE destination numkeys key key … [WEIGHTS weight weight…] [AGGEGATE SUM|MIN|MAX]
ZUNIONSTORE:计算有序集合并集,将结果保存起来
ZINTERSTORE destination numkeys key key … [WEIGHTS weight weight…] [AGGEGATE SUM|MIN|MAX]
KEYS相关的命令
KEYS:返回所有符合给定模式的key 语法: KEYS pattern
*: 匹配任意个字符
?:匹配一个任意字符
[]:匹配[]之间的一个字符
\x:匹配特殊字符
EXISTS:检测指定key是否存在 语法:EXISTS key
TYPE:返回key所存储的类型 语法:TYPE key
EXPIRE:设置key的过期时间 语法:EXPIRE key seconds
EXPIREAT:需要指定在指定时间戳过期 语法:EXPIREAT keytimestamp
PEXPIRE:以毫秒的形式指定过期时间 语法:PEXPIRE key milliseconds
PEXPIREAT:指定时间戳,单位为毫秒 语法:PEXPIREAT key timestamp
TTL:以秒为单位返回key剩余时间 如果key没有设置过期时间,返回-1;如果key不存在返回-2
PTTL:以毫秒为单位返回key剩余时间
PERSIST:将一个带有过期时间的key转变成永久的key 语法: PERSIST key
DEL:删除指定的key
RANDOMKEY:随机的从当前数据库中返回一个key
RENAME:重命名一个键 RENAME key newkey
RENAMENX:如果新名称不存在才会生效
DUMP:序列化给定的key,返回序列化之后的值
RESTORE:反序列化
MOVE:将当前数据库中的key移动到另外的数据库中
6、Redis的事务
1、开启事务
MULTI:开启事务,事务块中的多条语句会按照顺序放入队列当中,最后由EXEC命令来执行
MULTI
INCR counter1
INCR counter2
INCR counter3
PING
GET counter1
2、执行事务块中的命令
EXEC:执行事务块中的命令
3、监视一个或者多个key
WATCH:监视一个或者多个key,如果在执行事务之前这个key如果被其他命令改动,事务就被打断了。
UNWATCH:取消WATCH命令对所有key的监视
4、取消事务
DISCARD:
5、事务中的错误处理
语法错误:Redis接到exec后直接返回错误,正确的命令也不会被执行
运行错误:正确的命令会被执行
7、Redis连接相关
PING:测试和服务器之间是否连接有效
ECHO:打印一个特定信息
QUIT:请求服务器关闭与当前客户端的连接,EXIT,CTRL-C
SHUTDOWN:关闭服务器和客户端
AUTH:指定Redis的身份验证,Redis配文件中requirepass选项的值
CONFIG SET requirepass password
登录进来之后通过AUTH password进行认证
连接的时候-a password
SELECT:选择数据库 SELECT 0
8、生存时间
EXPIRE/EXPIREAT
PEXPIRE/PEXPIREAT
PERSIST
TTL
PTTL
使用SET GETSET也会清除过期时间
9、排序相关
对数值进行排序
SORT key
SORT key DESC
对字母进行排序
SORT key ALPHA DESC
使用LIMIT限制返回结果
SORT key [ALPHA] LIMIT 0 5 DESC
根据外部key的权重进行排序
SORT uid BY user_level_*
根据排序结果取出相应键值
SORT uid GET user_name_*
将排序结果保存起来
SORT key [BY pattern] [LIMIT offset count] [GET pattern] [GET pattern] [ASC|DESC|ALPHA] [STORE destination]
10、发布订阅模式
PUBLISH/SUBSCRIBE
发布订阅模式的原理
包含两个角色,一个是发布者,一个是订阅者;订阅者可以订阅一个或者多个频道channel;发布者可以向指定频道发布信息
通过PUBLISH发布消息
PUBLISH channel message
PUBLISH channel1.1 'abelxu'
通过SUBSCRIBE订阅频道
SUBSCRIBE channel …
注意:发不出去的消息是不会被持久化的,只有客户端订阅了之后才会接手后面发送的消息
UNSUBSCRIBE:取消某个频道订阅,但在Redis客户端中做了限制,没有办法进行验证 UNSUBSCRIBE [channel]
PSUBSCRIBE:订阅指定的规则
UNPSUBSCRIBE:取消订阅