Redis常用配置和简单介绍

什么是Redis

  • Redis是基于BSD协议的开源软件,它可以被当做数据库,缓存和消息队列使用。
  • Redis的处理数据通通放在了内存中,这大大提高了性能。为了让数据持久化,它提供了两种方式将数据写入磁盘中
  • Redis支持众多的数据结构,如:list,set,hashes,string等等。
  • Redis内置来主从复制功能以及redis cluster,保证了Redis的高可用性
  • Redis的事务性保证了它所有命令都是按顺序执行的,在Redis事务发生的时候,永远不会发生另一个客户端发生的请求,确保命令被单个隔离起来。 原子另一个特性就是要么所有的都成功,要么都不成功。

安装Redis

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

Redis是基于KEY-VALUE的数据库。 它支持众多的数据结构,下面来说一下常用的

string

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,必须是整数

扫描二维码关注公众号,回复: 12278470 查看本文章

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

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"

SET

没有排序的字符合集,并且成员必须是唯一的, 集合中最大的成员数为 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

sorted_set

有序集合,无重复值,根据给定的分数来进行排序。

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"

hash

相当于关联数组,以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"

pub/sub

发布、订阅。 发布者发布的消息可以通过频道发送给特定的订阅者,相反订阅者如果对多个频道感兴趣,它可以关注更多的发布者。

如果发布者发布的消息,发送给了众多的订阅者,这样就可以实现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 ...]]
取消订阅

Redis配置文件

NETWORK

  • bind:绑定地址,默认绑定在127.0.0.1。如果想绑定到所有地址上,写成:bind 0.0.0.0
  • protected-mode:是否启用安全认证,当用户没有显示的指定bind或者密码的时候,开启此项只会在本地访问。用户设定了密码和bind地址,可以开启。 默认为yes
  • port 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为合理值

GENERAL

  • 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持久化

SNAPSHOTTING

Redis默认的持久化存储功能,它是根据客户端显示的命令将内存中的数据,周期性的同步到磁盘中。数据默认存放在/var/lib/redis/dump.db

配置文件中定义了持久化存储的方式:
save <seconds> <change>

  • 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存放路径

除了上边配置文件中实现自动化存储的方式,在交互行中也可以显式的使用命令来存储。savebgsave

  • save:使用save的时候,redis客户端会被阻塞,直到RDB执行结束,并由新的RDB文件替换老的文件
  • bgsave:redis fork出父进程和子进程,所有的持久化存储全部交由子进程来完成。这样阻塞只发生在fork进程,而且这一过程也会很短。

使用RDB持久化存储,有以下几个特点:

  • RDB由于是某一时刻的快照,可以当做全量备份使用
  • RDB就是单一的一个文件,恢复起来会比AOF快很多,而且RDB文件可以发送到另一条主机上做容灾备份
  • RDB由于是快照,那么在主机发生故障的时候会导致某一时刻的数据丢失,导致数据不完整

APPEND ONLY MODE

AOF与RDB不同,AOF是以秒级的方式将每条记录追加到磁盘的文件当中,当redis关机重启的时候,会自动读取记录到内存中。

由于AOF文件会越写越大,redis提供了BGREWRITEAOF命令,通过读取现有内存的数据以命令方式写道临时文件中,完成之后替换现有的AOF文件。

相关配置:

  • appendonly no:是否开启AOF,默认NO
  • appendfilename "appendonly.aof":存储的文件名,默认路径/var/lib/redis
  • appendfsync 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:恢复过程中有语句有问题,是否要自动清除掉

LUA SCRIPTING

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"

LIMITS

  • maxclients 10000:最大并发连接数
  • maxmemory <bytes>:设置redis占用的最大内存,当占用的内存达到上限时,会根据maxmemory-policy来淘汰之前设定的key。
  • maxmemory-policy noeviction:redis默认策略,不淘汰任何值,redis提供以下几个淘汰策略
    • volatile-lru :对设置过期时间的键使用LRU算法淘汰
    • allkeys-lru:对所有的键进行LRU算法
    • volatile-random:随机淘汰设置过期时间的键
    • allkeys-random:随机淘汰
    • volatile-ttl:对比设置过期时间的键,越小越淘汰

猜你喜欢

转载自blog.csdn.net/qq_44564366/article/details/108302236