centos7的epel源包含了Redis包。可使用yum直接安装
yum install -y redis
Redis安装后的文件
/etc/redis.conf #Redis的配置文件
/usr/lib/systemd/system/redis.service #Redis的服务
/usr/bin/redis-cli #Redis的客户端
/var/lib/redis #Redis默认存放的路径
Redis是基于KEY-VALUE的数据库。 它支持众多的数据结构,下面来说一下常用的
Redis支持的数据类型,String(字符串)。它最大的能存储512M。
我们使用redis-cli来进入交互模式
127.0.0.1:6379> help @string
#查询string的用法
SET
语法: SET key value [EX seconds] [PX milliseconds] [NX|XX]
用来设置字符串的键
EX seconds
:过期时间
127.0.0.1:6379> SET name tangseng EX 20
OK
# 设置name键,值为tangseng , 20s后过期
GET
语法:GET key
显示键的值
127.0.0.1:6379> GET name
"tangseng"
INCR
语法:INCR KEY
将某一键的值增加1,必须是整数
DECR
语法:DECR KEY
将某一键的值减1,必须是整数
SETNX
语法:SETNX key value
如果创建的键不存在则创建,存在则不创建
127.0.0.1:6379> SETNX name ydong
(integer) 0
# 因为name存在,创建失败
127.0.0.1:6379> SETNX students xiaowang
(integer) 1
SETEX
语法:SETEX key seconds value
设置键的值和过期时间
SETEX name 20 ydong
OK
INCRBYFLOAT
语法:INCRBYFLOAT key increment
按给定的数量来递增键的浮点值
127.0.0.1:6379> INCRBYFLOAT number 0.2
"7.2"
127.0.0.1:6379> INCRBYFLOAT number 0.2
"7.4"
MGET
语法:MGET key [key ...]
获取所有给定键的值
127.0.0.1:6379> MGET number students
1) "7.8"
2) "xiaowang"
MSET
语法:MSET key value [key value ...]
设置给定的键和键的值
127.0.0.1:6379> MSET number 2 students dasheng
OK
127.0.0.1:6379> MGET number students
1) "2"
2) "dasheng"
list
是列表功能,好比所有的数据都放在一个方框中,放满了数据,那么我们想要插入数据的时候,从左或从右都可以插入。哪端插入一个就挤走一个另一端的一个数据。 这种就是我们所说的消息队列。
LPUSH
语法:LPUSH key value [value ...]
设置键的一个值或多个值,从左端插入
127.0.0.1:6379> LPUSH colors green red yellow
(integer) 4
127.0.0.1:6379> LRANGE colors 0 2
1) "yellow"
2) "red"
3) "green"
RPUSH
语法:RPUSH key value [value ...]
设置键的一个值或多个值,从右端插入
127.0.0.1:6379> RPUSH colors blue
(integer) 4
127.0.0.1:6379> LRANGE colors 0 3
1) "yellow"
2) "red"
3) "green"
4) "blue"
LPOP
语法:LPOP key
删除并获取列表中的第一个元素,从左端开始
127.0.0.1:6379> LPOP colors
"yellow"
127.0.0.1:6379> LRANGE colors 0 3
1) "red"
2) "green"
3) "blue"
RPOP
语法:RPOP key
删除并获取列表中的第一个元素,从右端开始
127.0.0.1:6379> RPOP colors
"blue"
127.0.0.1:6379> LRANGE colors 0 3
1) "red"
2) "green"
LPUSHX
语法:LPUSHX key value
仅当列表存在时,在列表前添加一个值
127.0.0.1:6379> LPUSHX name ydong
(integer) 0
127.0.0.1:6379> LPUSHX colors yellow
(integer) 3
127.0.0.1:6379> LRANGE colors 0 3
1) "yellow"
2) "red"
3) "green"
LRANGE
语法:LRANGE key start stop
从列表中取出元素的范围
LINDEX
语法:LINDEX key index
通过索引来获取元素
127.0.0.1:6379> LINDEX colors 0
"yellow"
LSET
语法:LSET key index value
通过指定的索引设置该索引的值
127.0.0.1:6379> LSET colors 0 blue
OK
127.0.0.1:6379> LRANGE colors 0 3
1) "blue"
2) "red"
3) "green"
没有排序的字符合集,并且成员必须是唯一的, 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。set的集合是通过hash来实现的,所以性能极高
SADD
语法:SADD key member [member ...]
向集合中添加1个或多个成员
127.0.0.1:6379> SADD name1 dasheng zhubajie tangseng bailongma
(integer) 4
SMEMBERS
语法:SMEMBERS key
显示集合中的所有成员
127.0.0.1:6379> SMEMBERS name1
1) "dasheng"
2) "bailongma"
3) "tangseng"
4) "zhubajie"
SPOP
语法:SPOP key [count]
随机删除成员并返回一个或多个成员,count可以制定删除几个成员
127.0.0.1:6379> SMEMBERS name1
1) "dasheng"
2) "bailongma"
3) "tangseng"
4) "zhubajie"
127.0.0.1:6379> SPOP name1 2
1) "dasheng"
2) "tangseng"
SREM
语法:SREM key member [member ...]
删除1个或多个成员
127.0.0.1:6379> SMEMBERS name1
1) "dasheng"
2) "bailongma"
3) "tangseng"
4) "zhubajie"
127.0.0.1:6379> SREM name1 dasheng bailongma
(integer) 2
127.0.0.1:6379> SMEMBERS name1
1) "tangseng"
2) "zhubajie"
SRANDMEMBER
语法:SRANDMEMBER key [count]
随机获取一个或多个成员
127.0.0.1:6379> SRANDMEMBER name1 1
1) "tangseng"
127.0.0.1:6379> SRANDMEMBER name1 1
1) "zhubajie"
SINTER
语法:SINTER key [key ...]
取一个或多个键的合集
127.0.0.1:6379> SMEMBERS name1
1) "zhubajie"
2) "tangseng"
127.0.0.1:6379> SMEMBERS name2
1) "dasheng"
2) "shawujing"
3) "tangseng"
127.0.0.1:6379> SINTER name1 name2
1) "tangseng"
SUNION
语法:SUNION key [key ...]
取一个键或多个键的合集
127.0.0.1:6379> SUNION name1 name2
1) "dasheng"
2) "shawujing"
3) "tangseng"
4) "zhubajie"
SDIFF
语法:SDIFF key [key ...]
两个键的差值,第一个键去掉和第二个键的相同成员,并返回第一个键的结果
127.0.0.1:6379> SDIFF name1 name2
1) "zhubajie"
SISMEMBER
语法:SISMEMBER key member
判定给出的值是否在键里面
127.0.0.1:6379> SISMEMBER name1 shawujing
(integer) 0
127.0.0.1:6379> SISMEMBER name1 zhubajie
(integer) 1
有序集合,无重复值,根据给定的分数来进行排序。
ZADD
语法:ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
向排序集合中添加一个或多个成员,如果已经存在,则更新其分数,在添加完成之后,会根据score来自动排序
127.0.0.1:6379> ZADD score 60 xiaotian 80 xiaoming 70 xiaohong
(integer) 3
ZCARD
语法:ZCARD key
得到键中的成员数量
127.0.0.1:6379> ZCARD score
(integer) 3
ZCOUNT
语法:ZCOUNT key min max
在最大和最小之间的成员有几个
127.0.0.1:6379> ZCOUNT score 70 90
(integer) 2
ZRANK
语法:ZRANK key member
返回给定成员值的索引
127.0.0.1:6379> ZRANK score xiaotian
(integer) 0
ZRANGE
语法:ZRANGE key start stop [WITHSCORES]
在给出的索引范围内返回所有的成员
127.0.0.1:6379> ZRANGE score 0 2
1) "xiaotian"
2) "xiaohong"
3) "xiaoming"
相当于关联数组,以key[field] value来存储数据
HSET
语法:HSET key field value
设置一个键的字段和值
127.0.0.1:6379> HSET class xiaoming 1
(integer) 1
HMSET
语法:HMSET key field value [field value ...]
设置多个键的字段和值
127.0.0.1:6379> HMSET class xiaohong 2 xiaotian 3 xiaoma 1
OK
HGET
语法:HGET key field
根据给出的一个字段,返回值
127.0.0.1:6379> HGET class xiaoming
"1"
HMGET
语法:HMGET key field [field ...]
根据给出的字段,返回所有的值
127.0.0.1:6379> HMGET class xiaoming xiaohong xiaotian
1) "1"
2) "2"
3) "3"
HKEYS
语法:HKEYS key
返回键中的所有的字段
127.0.0.1:6379> HKEYS class
1) "xiaoming"
2) "xiaohong"
3) "xiaotian"
4) "xiaoma"
HVALS
语法:HVALS key
返回键中所有的值
127.0.0.1:6379> HVALS class
1) "1"
2) "2"
3) "3"
4) "1"
HDEL
语法:HDEL key field [field ...]
删除一个或多个字段
127.0.0.1:6379> HDEL class xiaoming xiaohong
(integer) 2
HGETALL
语法:HGETALL key
返回键内所有的字段和值
127.0.0.1:6379> HGETALL class
1) "xiaotian"
2) "3"
3) "xiaoma"
4) "2"
发布、订阅。 发布者发布的消息可以通过频道发送给特定的订阅者,相反订阅者如果对多个频道感兴趣,它可以关注更多的发布者。
如果发布者发布的消息,发送给了众多的订阅者,这样就可以实现1对N的效果。
PSUBSCRIBE
语法:PSUBSCRIBE pattern [pattern ...]
监听发布到pattern模式下的频道的消息。
127.0.0.1:6379> PSUBSCRIBE football
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "football"
3) (integer) 1
#监听之后,。会阻塞在这里,等发布者发布消息到对应的频道
PUBLISH
语法:PUBLISH channel message
发布消息到指定的频道
127.0.0.1:6379> PUBLISH football hello
(integer) 1
订阅者会接收到消息
127.0.0.1:6379> PSUBSCRIBE football
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "football"
3) (integer) 1
1) "pmessage"
2) "football"
3) "football"
4) "hello"
UNSUBSCRIBE
语法:UNSUBSCRIBE [channel [channel ...]]
取消订阅
bind
:绑定地址,默认绑定在127.0.0.1。如果想绑定到所有地址上,写成:bind 0.0.0.0
protected-mode
:是否启用安全认证,当用户没有显示的指定bind或者密码的时候,开启此项只会在本地访问。用户设定了密码和bind地址,可以开启。 默认为yesport 6379
:Redis的端口tcp-backlog 511
:tcp完成三次握手的队列长度,在高并发的情况一般要调高此项。 缓解用户连接变慢的情况。 tcp-backlog的定义可以参考一下unixsocket /tmp/redis.sock
:设定套接字的文件路径,如果只是本机访问可以开启。timeout 0
:客户端在指定的空闲时间内没有连接服务器,就自动断开,0表示不断开tcp-keepalive 300
:如果设置不为0,则使用tcp的so_keepalive的值。这个检测有两个好处,可以检测对端设备的状态,也可以检测中间的网络设备连接是否活着。 linux内部设置了多长时间向Redis的套接字发送一个ack消息,关闭对端连接时间则需要双倍时间,这个时长经过测试,300s为合理值daemonize no
:是否以守护进程运行pidfile /var/run/redis_6379.pid
:进程文件loglevel notice
:日志记录级别logfile /var/log/redis/redis.log
:日志路径syslog-enabled no
:是否用syslog记录日志,选择其一就好databases 16
:Redis作为数据库,最多可以支持多少个库。默认16个Redis默认的持久化存储功能,它是根据客户端显示的命令将内存中的数据,周期性的同步到磁盘中。数据默认存放在/var/lib/redis/dump.db
配置文件中定义了持久化存储的方式:
save
save 900 1
:900秒内存在1个键的变化,就快照一次save 300 10
:300秒内存在10个键的变化,就快照一次save 60 10000
:60秒内存在1w个键的变化,就快照一次其它相关配置
stop-writes-on-bgsave-error yes
:dump文件如果写入失败的话,是否禁止新的操作请求进来rdbcompression yes
:快照往磁盘上复制的时候是否压缩rdbchecksum yes
:检查数据的一致性dbfilename dump.rdb
:存放文件名dir /var/lib/redis
:dump存放路径除了上边配置文件中实现自动化存储的方式,在交互行中也可以显式的使用命令来存储。save
和bgsave
save
:使用save的时候,redis客户端会被阻塞,直到RDB执行结束,并由新的RDB文件替换老的文件bgsave
:redis fork出父进程和子进程,所有的持久化存储全部交由子进程来完成。这样阻塞只发生在fork进程,而且这一过程也会很短。使用RDB持久化存储,有以下几个特点:
AOF与RDB不同,AOF是以秒级的方式将每条记录追加到磁盘的文件当中,当redis关机重启的时候,会自动读取记录到内存中。
由于AOF文件会越写越大,redis提供了BGREWRITEAOF命令,通过读取现有内存的数据以命令方式写道临时文件中,完成之后替换现有的AOF文件。
相关配置:
appendonly no
:是否开启AOF,默认NOappendfilename "appendonly.aof"
:存储的文件名,默认路径/var/lib/redisappendfsync everysec
:AOF每秒同步一次,AOF还提供了两种方式.
always:
每语句一次,只要语句写完,就立即保存在文件当中no
:redis不自动执行同步操作,而是由内核来决定时候进行同步操作no-appendfsync-on-rewrite no
: 是否在后台执行aof重写期间调动fsync。 no表示调用auto-aof-rewrite-percentage 100
:新增的部分和原来的比较,达到100%就重写auto-aof-rewrite-min-size 64mb
:新增的部分和原来的比较,差值最小达到64M
aof-load-truncated yes
:恢复过程中有语句有问题,是否要自动清除掉requirepass centos
:安全认证。
在交互模式下需要使用AUTH password
127.0.0.1:6379> GET name
(error) NOAUTH Authentication required.
127.0.0.1:6379> AUTH centos
OK
127.0.0.1:6379> GET name
(nil)
或者在命令行中使用-a选项
[root@localhost ~]# redis-cli -a centos
127.0.0.1:6379> keys *
1) "num"
2) "colors"
3) "students"
4) "number"
maxclients 10000
:最大并发连接数maxmemory
:设置redis占用的最大内存,当占用的内存达到上限时,会根据maxmemory-policy
来淘汰之前设定的key。maxmemory-policy noeviction
:redis默认策略,不淘汰任何值,redis提供以下几个淘汰策略
volatile-lru
:对设置过期时间的键使用LRU算法淘汰allkeys-lru
:对所有的键进行LRU算法volatile-random
:随机淘汰设置过期时间的键allkeys-random
:随机淘汰volatile-ttl
:对比设置过期时间的键,越小越淘汰