redis系列--你真的入门了吗?redis4.0入门~
前言redis作为nosql家族中非常热门的一员,也是被大型互联网公司所青睐,无论你是开发、测试或者运维,学习掌握它总会为你的职业生涯增色添彩。 当然,你或多或少已经了解redis,但是你是否了解其中的某些细节,本片文章将详细介绍redis基础,后续也会介绍其高级部分如、持久化、复制、集群等内容,希望对你有所帮助。 自redis3.0发布已经3年了,redis目前官方提供的redis稳定版本是4.0,以下示例均在4.0版本上进行。 一、redis简介概述redis(REmote DIctionary Server)是一个由Salvatore Sanfilippo写key-value存储系统,它由C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value类型的数据库,并提供多种语言的API。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步,redis在3.0版本推出集群模式。 特点、优势
对比memcache
二、开始源码部署yum install gcc -y
wget http://download.redis.io/redis-stable.tar.gz
tar zxvf redis-stable.tar.gz
cd redis-=/opt/app/redis install
/etc/redis
cp redis.conf /etc/redis/6379.conf
cp utils/redis_init_script /etc/init.d/redis
chmod a+x /etc/init.d/redis
vi /etc/redis/6379.conf
bind 0.0.0.0
maxmemory 4294967296
daemonize yes
<span style="color: #008000;"># <span style="color: #008000;">###启动与停止/etc/init.d/<span style="color: #000000;">redis start /etc/init.d/redis stop 查看是否成功安装
redis-
127.0.0.1:6379>
redis_version:4.0.10000000002.6.32-64264
二进制文件说明redis安装完成后会有以下可执行文件(window下是exe文件)生成,下面是各个文件的作用。 redis-server
redis-cli
redis-benchmark
redis-check-aof
redis-check-dump
redis-sentinel
三、配置详解redis所有的配置参数都可以通过客户端通过“CONFIG GET 参数名” 获取,参数名支持通配符,如*代表所有。所得结果并按照顺序分组,第一个返回结果是参数名,第二个结果是参数对应的值。 除了查看配置还可以使用CONFIG SET修改配置,写入配置文件使用CONFIG REWRITE,使用时是需要注意某些关于服务配置参数慎重修改,如bind。 配置参数以及解释,需要注意的是,有些配置是4.0.10新增的,有些配置已经废除,如vm相关配置,和集群相关配置在集群篇章在进行补充。
0.0.0.0
/var/run/
6379
-
16
-show-logo yes
<span style="color: #008000;"># <span style="color: #008000;">############################### 快照相关配置 #################################<span style="color: #000000;"> save 900 1<span style="color: #000000;"> save 300 10<span style="color: #000000;"> save 60 10000 <span style="color: #008000;">#<span style="color: #008000;">配置快照(rdb)促发规则,格式:save <span style="color: #000000;"> <span style="color: #000000;"> stop-write-on-bgsave-<span style="color: #000000;">error yes <span style="color: #008000;">#<span style="color: #008000;">yes代表当使用bgsave命令持久化出错时候停止写RDB快照文件,no则代表继续写 <span style="color: #000000;"> rdbchecksum yes <span style="color: #008000;">#<span style="color: #008000;">开启rdb文件校验 <span style="color: #000000;"> dir <span style="color: #800000;">"<span style="color: #800000;">/etc<span style="color: #800000;">" <span style="color: #008000;">#<span style="color: #008000;">数据文件存放目录,rdb快照文件和aof文件都会存放至该目录 <span style="color: #008000;"># <span style="color: #008000;">################################ 复制相关配置参数 #################################<span style="color: #000000;"> slaveof <span style="color: #008000;"># <span style="color: #000000;"> masterauth <span style="color: #008000;"># <span style="color: #000000;"> slave-serve-stale-<span style="color: #000000;">data yes <span style="color: #008000;">#<span style="color: #008000;"> 当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:<span style="color: #008000;"> <span style="color: #008000;"> 1) 如果slave-serve-stale-data设置为yes(默认设置),从库会继续相应客户端的请求<span style="color: #008000;"> <span style="color: #008000;"> 2) 如果slave-serve-stale-data是指为no,除了INFO和SLAVOF命令之外的任何请求都会返回一个错误"SYNC with master in progress" <span style="color: #000000;"> <span style="color: #008000;">#<span style="color: #008000;">从库会按照一个时间间隔向主库发送PING命令来判断主服务器是否在线,默认是10秒 <span style="color: #000000;"> repl-timeout 60 <span style="color: #008000;">#<span style="color: #008000;">设置主库批量数据传输时间或者ping回复时间间隔超时时间,默认值是60秒<span style="color: #008000;"> <span style="color: #008000;"> 一定要确保repl-timeout大于repl-ping-slave-period<span style="color: #000000;"> <span style="color: #008000;">#<span style="color: #008000;">################################# 安全相关配置 ################################### <span style="color: #008000;"> 如果设置 maxclients 0,表示不作限制。<span style="color: #008000;"><span style="color: #008000;"> 当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息<span style="color: #000000;"> <span style="color: #008000;"> volatile-lru -> 利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used )<span style="color: #008000;"><span style="color: #008000;"> allkeys-lru -> 利用LRU算法移除任何key<span style="color: #008000;"><span style="color: #008000;"> volatile-random -> 移除设置过过期时间的随机key<span style="color: #008000;"><span style="color: #008000;"> allkeys->random -> remove a random key,any key<span style="color: #008000;"><span style="color: #008000;"> volatile-ttl -> 移除即将过期的key(minor TTL)<span style="color: #008000;"># 4<span style="color: #000000;"><span style="color: #008000;">.0默认noeviction代表不删除任何key,只在写操作时候返回错误。 maxmemory-samples 5 <span style="color: #008000;">#<span style="color: #008000;">############################# AOF相关配置############################### <span style="color: #008000;"> 但是这样会造成appendonly.aof文件过大,所以redis还支持了BGREWRITEAOF指令,对appendonly.aof 进行重写。<span style="color: #000000;"> <span style="color: #008000;"> no: 不进行同步,交给操作系统去执行 ,速度较快<span style="color: #008000;"><span style="color: #008000;"> always: always表示每次有写操作都调用fsync方法强制内核将该写操作写入到文件,速度会慢,但是安全,因为每次写操作都在AOF文件中.<span style="color: #008000;"><span style="color: #008000;"> everysec: 表示对写操作进行累积,每秒同步一次,折中方案.<span style="color: #008000;"><span style="color: #008000;"> 默认是"everysec",按照速度和安全折中这是最好的。<span style="color: #000000;"> <span style="color: #008000;"> 在某些Linux配置中会阻止过长的fsync()请求。注意现在没有任何修复,即使fsync在另外一个线程进行处理,为了减缓这个问题,可以设置下面这个参数no-appendfsync-on-rewrite<span style="color: #000000;"> <span style="color: #008000;">基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动<span style="color: #008000;"><span style="color: #008000;"> 同时需要指定一个最小大小用于AOF重写,这个用于阻止即使文件很小但是增长幅度很大也去重写AOF文件的情况<span style="color: #008000;"><span style="color: #008000;"> 设置 percentage 为0就关闭这个特性<span style="color: #008000;"><span style="color: #008000;">auto-aof-rewrite-percentage 代表AOF文件每次重写文件大小(以百分数代表),100表示百分之百,即当文件增加了1倍(100%),则开始重写AOF文件<span style="color: #008000;"><span style="color: #008000;">auto-aof-rewrite-min-size 设置最小重写文件大小,避免文件小而执行太多次的重写<span style="color: #000000;"> <span style="color: #008000;">#<span style="color: #008000;">################################# 慢查询配置 ################################### slowlog-log-slower-than 10000 <span style="color: #008000;">另一个是slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除<span style="color: #000000;"> <span style="color: #008000;">#<span style="color: #008000;">############################## 高级配置 ############################### <span style="color: #008000;"> Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,<span style="color: #008000;"><span style="color: #008000;"> 这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。<span style="color: #000000;"> zset-max-ziplist-entries 128<span style="color: #000000;"> <span style="color: #008000;"> list数据类型节点值大小小于多少字节会采用紧凑存储格式。<span style="color: #000000;"> <span style="color: #008000;"> 当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。<span style="color: #008000;"><span style="color: #008000;"> 如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存<span style="color: #000000;"> <span style="color: #008000;">normal - >普通客户端,包括MONITOR客户端<span style="color: #008000;"><span style="color: #008000;">subve - >从服务器客户端<span style="color: #008000;"><span style="color: #008000;">pubsub - >客户端订阅了至少一个pubsub通道或模式<span style="color: #008000;"><span style="color: #008000;">设置方法:client-output-buffer-limit 软限制大小 硬限制大小 秒数<span style="color: #008000;"><span style="color: #008000;">当客户端达到硬限制大小则立即断开连接,当客户端达到软限制时候并且在设置的秒数缓冲大小任然超了,则在设置的秒数后断开连接四、数据类型以及相关操作通常使用redis不外乎使用其常用的5中数据类型:string、list、hash、set、sorted_set,在3.2版本以后新添加geo经纬度支持,以下将对其类型的常用操作做说明。 命令使用前言通大多数据库一样,redis所有的命令提供了帮助,可以使用help +命令名称查看其使用方法,帮助信息中不仅有命令用法,还有命令始于版本信息,分组等。 为了友好的使用,redis还将所有命令都进行了分组,同时使用help+@+组名进行查看每个组中所有命令,以下是所有分组信息。 上面以及介绍如何查看命令使用方法,所以在以下数据类型操作时候,只举例常用的命令,更多命令参考https://redis.io/commands 注意:redis在3.2版本新增geo数据类型。 generic
string
list
set
sorted_set
hash
pubsub
transactions
connection
server
scripting
hyperloglog
cluster
geo
示例:查看事务操作所有命令 key操作常用: DEL key
KEYS pattern
EXISTS key [key ...]
EXPIRE key seconds
MOVE key db
示例: string操作字符串操作中需要注意的是,redis中的整型也当作字符串处理。 常用: SET key value [EX seconds] [PX milliseconds] [NX|XX]
示例: list操作列表中的元素索引从0开始,倒数的元素可以用“-”+倒数位置表示,如-2,代表倒数第二个元素,-1则代表最后一个元素。 Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边。 一个列表最多可以包含 232?- 1 个元素 (4294967295,每个列表超过40亿个元素)。 常用: LPUSH key value [value ...]
|AFTER pivot value
0: 从头往尾移除值为 value 的元素
示例: hash操作hash操作所有命令都以H开头。 Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。 Redis 中每个 hash 可以存储 232?- 1 键值对(40多亿)。 常用: HDEL key field [field ...]
示例: 集合set操作Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。 Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1?(4294967295,每个集合可存储40多亿个成员)。 常用: SADD key member [member ...]
有序集合操作Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。 有序集合的成员是唯一的,但分数(score)却可以重复。 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1?(4294967295,每个集合可存储40多亿个成员)。 常用: ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
GEO类型操作Redis的GEO是 3.2 版本的新特性,对GEO(地理位置)的支持。这个功能可以将用户给定的地理位置信息储存起来, 并对这些信息进行操作。 geo类型命令不多,总共6个所以这里全部列举出来了。 GEOADD key longitude latitude member [longitude latitude member ...]
<span style="color: #008000;"># <span style="color: #008000;">m 表示单位为米<span style="color: #008000;"> <span style="color: #008000;">km 表示单位为千米<span style="color: #008000;"> <span style="color: #008000;">mi 表示单位为英里<span style="color: #008000;"><span style="color: #008000;">ft 表示单位为英尺<span style="color: #000000;"> <span style="color: #008000;">#<span style="color: #008000;">范围可以使用以下其中一个单位: <span style="color: #008000;">#<span style="color: #008000;">m 表示单位为米。<span style="color: #008000;"> <span style="color: #008000;">km 表示单位为千米。<span style="color: #008000;"><span style="color: #008000;">mi 表示单位为英里。<span style="color: #008000;"><span style="color: #008000;">ft 表示单位为英尺。<span style="color: #008000;"><span style="color: #008000;">在给定以下可选项时, 命令会返回额外的信息:<span style="color: #008000;">#<span style="color: #008000;">WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。<span style="color: #008000;"> <span style="color: #008000;">WITHCOORD: 将位置元素的经度和维度也一并返回。<span style="color: #008000;"><span style="color: #008000;">WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。<span style="color: #008000;"><span style="color: #008000;">命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:<span style="color: #008000;">#<span style="color: #008000;">ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。<span style="color: #008000;"> <span style="color: #008000;">DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。<span style="color: #008000;"><span style="color: #008000;">在默认情况下, GEORADIUS 命令会返回所有匹配的位置元素。 虽然用户可以使用 COUNT
|