Redis是什么
说明
开源的(BSD协议),使用ANSI C 编写,基于 内存 的且支持持久化,高性能的Key-Value的 NoSQL数据库
支持 数据结构类型丰富,有如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。
丰富的 支持主流语言 的客户端,C、C++、Python、Erlang、R、C#、Java、PHP、Objective-C、Perl、Ruby、Scala、Go、JavaScript
用途:缓存(StackOverFlow)、数据库(微博)、消息中间件(微博)
优点
有丰富的数据结构,以及丰富的命令,所以很多后台逻辑可以直接用Redis实现
减少网络通信,同时降低后端服务器压力
编译安装:
安装依赖
yum -y install gcc tcl -y
解压
tar xf redis-2.8.18.tar.gz
进入到目录,编译安装
make && make PREFIX=/opt/devel/redis install
修改环境变量
export REDIS_HOME=/opt/devel/redis
export PATH=$PATH:$REDIS_HOME/bin
utils目录: 安装服务
./install_server.sh
选择服务的端口,持久化目录,修改或直接回车选择默认
启动:
程序+配置:不同的配置产生多个实例程序
端口号,持久化数据目录
命令
redis-cli -h 127.0.0.1 -p 6379 -n 0
客户端连接数据库 ip - 端口 - 数据库
select 0-15
选择数据库,默认16个数据库
FLUSHDB
清除当前库数据
FLUSHALL
清除所有库中的数据
(1)String
SET
设置字符串值
key value [EX seconds] [PX milliseconds] [NX|XX]
EX 设置过期时间,秒,等同于SETEX key seconds value
PX 设置过期时间,毫秒,等同于PSETEX key milliseconds value
NX 键不存在,才能设置,等同于SETNX key value
XX 键存在时,才能设置
MSET
同时添加多个
key value [key value ...]
MSETNX key value [key value ...]
键不存在时,设置字符串值
注意:这是原子操作(都成功或都失败)
过期
EXPIRE key seconds
PEXPIRE key milliseconds
设置多少秒或者毫秒后过期
EXPIREAT key timestamp
PEXPIREAT key milliseconds-timestamp
设置在指定Unix时间戳过期
PERSIST key
删除过期
TTL key
PTTL key
查看剩余生存时间
key存在但没有设置TTL,返回-1
key存在,但还在生存期内,返回剩余的秒或者毫秒
key曾经存在,但已经消亡,返回-2(2.8版本之前返回-1)
KEYS pattern
查找键
pattern取值
* 任意长度字符
? 任意一个字符
[] 字符集合,表示可以是集合中的任意一个
TYPE key
值的类型
EXISTS key
RENAME key newkey
RENAMENX key newkey
DEL key [key ...]
GET key
MGET key [key ...]
同时取多个
GETSET key value
返回旧值并设置新值 如果键不存在,就创建并赋值
STRLEN key
字符串长度,不是字符个数,而是字节个数,不同编码长度不同。
数字类型,不是占一个字节,为了二进制安全,填充为3个
APPEND key value
追加字符串
如果键存在就追加;如果不存在就等同于SET key value
GETRANGE key start end
索引值从0开始,负数表示从字符串右边向左数起,-1表示最有一个字符
INCR key
步长1的增减
字符串值会被解释成64位有符号的十进制整数来操作,结果依然转成字符串
可以接负值
DECR key
INCRBY key decrement
DECRBY key decrement
按指定步长增减
位操作(位图bitmap)
SETBIT key offset value
设置某一 位 上的值 , 不是字节
offset偏移量,从0开始
value不写,默认是0
GETBIT key offset
获取某一位上的值
BITPOS key bit [start] [end]
返回指定值0或者1在指定区间上第一次出现的位置
区间为 字节 的索引
BITOP AND destkey key [key ...]
对一个或多个 key 求逻辑并,并将结果保存到 destkey
operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种
当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作 0
空的 key 也被看作是包含 0 的字符串序列
BITCOUNT key [start] [end]
统计指定位区间上值为1的个数
从左向右从0开始,从右向左从-1开始,注意start、end是字节
(2)List列表
说明
基于Linked List实现
元素是字符串类型
列表头尾增删快,中间增删慢,增删元素是常态
元素可以重复出现
最多包含2^32-1元素
列表的索引
从左至右,从0开始
从右至左,从-1开始
命令说明
B block 块,阻塞
L left 左
R right 右
X exist 存在
PUSH
LPUSH key value [value ...]
LPUSHX key value
RPUSH key value [value ...]
RPUSHX key value
左右或者头尾压入元素
POP
LPOP key
RPOP key
左右或者头尾弹出元素
同一方向压入弹出为栈,不同方向压入弹出为队列
RPOPLPUSH source destination
从一个列表尾部弹出元素压入到另一个列表的头部
LRANGE key start stop
返回列表中指定范围元素
LRANGE key 0 -1 表示返回所有元素
LINDEX key index
获取指定位置的元素
LSET key index value
设置指定位置元素的值
LLEN key
列表长度,元素个数
LREM key count value
从列表头部开始删除值等于value的元素count次
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值
count = 0 : 移除表中所有与 value 相等的值
LTRIM key start stop
去处指定范围外元素
LTRIM listkey 1 -1
LINSERT key BEFORE|AFTER pivot value
在列表中某个存在的值(pivot)前或后插入元素
key和pivot不存在,不进行任何操作
阻塞
产生
如果弹出的列表不存在或者为空,就会阻塞
超时时间设置为0,就是永久阻塞,直到有数据可以弹出
如果多个客户端阻塞在同一个列表上,使用First In First Service原则,先到先服务
左右或者头尾阻塞弹出元素
BLPOP key [key ...] timeout
BRPOP key [key ...] timeout
从一个列表尾部阻塞弹出元素压入到另一个列表的头部
BRPOPLPUSH source destination timeout
(3)Hash散列
说明
由field和关联的value组成的map键值对
field和value是字符串类型
一个hash中最多包含2^32-1键值对
Hash用途
节约内存空间
不适合hash的情况
使用二进制位操作命令
使用过期键功能
HSET key field value
HSETNX key field value
key的filed不存在的情况下执行,key不存在直接创建
HMSET key field value [field value ...]
同时设置多个字段
HLEN key
返回字段个数
HEXISTS key field
判断字段是否存在
key或者field不存在,返回0
HGET key field
返回字段值
HMGET key field [field ...]
返回多个字段值
HGETALL key
返回所有的键值对
HKEYS key
返回所有字段名
HVALS key
返回所有值
HINCRBY key field increment
在字段对应的值上进行整数的增量计算
HINCRBYFLOAT key field increment
在字段对应的值上进行浮点数的增量计算
HDEL key field [field ...]
删除指定的字段
设置单个字段
(4)Set集合
说明
无序的、去重的
注意, SMEMBERS 有可能返回不同的结果,所以,如果需要存储有序且不重复的数据使用有序集合,存储有序可重复的使用列表list
元素是字符串类型
最多包含2^32-1元素
SADD key member [member ...]
增加一个或多个元素
如果元素已经存在,则自动忽略
SREM key member [member ...]
移除一个或者多个元素
元素不存在,自动忽略
SMEMBERS key
返回集合包含的所有元素
如果集合元素过多,例如百万个,需要遍历,可能会造成服务器阻塞,生产环境应避免使用
SISMEMBER key member
检查给定元素是否存在于集合中
SRANDMEMBER key [count]
随机返回集合中指定个数的
如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合
如果 count 为负数,那么命令返回一个数组,数组中的元素可能会 重复 出现多次,而数组的长度为 count 的绝对值
如果 count 为 0,返回空
如果 count 不指定,随机返回一个元素
SCARD key
返回集合中元素的个数
键的结果会保存信息,集合长度就记录在里面,所以不需要遍历
SPOP key
随机从集合中移除并返回这个被移除的元素
SMOVE source destination member
把元素从源集合移动到目标集合
差集
SDIFF key [key ...]
从第一个key的集合中去除其他集合和自己的交集部分
SDIFFSTORE destination key [key ...]
将差集结果存储在目标key中
交集
SINTER key [key ...]
SINTERSTORE destination key [key ...]
并集
SUNION key [key ...]
SUNIONSTORE destination key [key ...]
(5)SortedSet有序集合
说明
类似Set集合
元素是字符串类型
有序的、去重的
每一个元素都关联着一个 浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。分值可以相同
最多包含2^32-1元素
默认 按分数Score排序
ZADD key score member [score member ...]
增加一个或多个元素
如果元素已经存在,则使用新的score
ZREM key member [member ...]
移除一个或者多个元素
元素不存在,自动忽略
ZSCORE key member
显示分值
ZINCRBY key increment member
增加或者减少分值
increment为负数就是减少
ZRANK key member
返回元素的排名(索引)
ZREVRANK key member
返回元素的逆序排名
ZRANGE key start stop [WITHSCORES]
返回指定索引区间元素
如果score相同,则按照字典序lexicographical order 排列
默认按照score从小到大,如果需要score从大到小排列,使用ZREVRANGE
ZREVRANGE key start stop [WITHSCORES]
返回指定索引区间元素
如果score相同,则按照字典序lexicographical order 的 逆序 排列
默认按照score从大到小,如果需要score从小到大排列,使用ZRANGE
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
返回指定分值区间元素
返回score默认属于[min,max]之间,元素按照score升序排列,score相同字典序
LIMIT中offset代表跳过多少个元素,count是返回几个。类似于Mysql
使用小括号,修改区间为开区间,例如(5 (10 5)
-inf和+inf表示负无穷和正无穷
ZRANGEBYSCORE fruits 7 (4
ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
返回score默认属于[min,max]之间,元素按照score降序排列,score相同字典降序
ZREMRANGEBYRANK key start stop
移除指定排名范围的元素
ZREMRANGEBYSCORE key min max
移除指定分值范围的元素
ZCARD key
返回集合中元素个数
ZCOUNT key min max
返回指定范围中元素的个数
ZCOUNT fruits (4 7
并集
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
numkeys指定key的数量,必须
WEIGHTS选项,与前面设定的key对应,对应key中每一个score都要乘以这个权重
AGGREGATE选项,指定并集结果的聚合方式
SUM:将所有集合中某一个元素的score值之和作为结果集中该成员的score值
MIN:将所有集合中某一个元素的score值中最小值作为结果集中该成员的score值
MAX:将所有集合中某一个元素的score值中最大值作为结果集中该成员的score值
例
ZADD scores1 70 tom 80 peter 60 john
ZADD scores2 90 peter 60 ben
ZUNIONSTORE scores-all 2 scores1 scores2
ZUNIONSTORE scores-all1 2 scores1 scores2 AGGREGATE SUM
ZUNIONSTORE scores-all2 2 scores1 scores2 WEIGHTS 1 0.5 AGGREGATE SUM
交集
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]