Redis介绍与安装详解

一、Redis介绍
Redis是一种具有数据结构的NOSQL数据库,其存储类型为key-value 模式,可以通过一组命令提供对可变数据结构的访问,不同的进程可以以共享的方式查询和修改相同的数据结构。
Redis数据结构一些特殊的属性:
Redis始终将它们存储在磁盘上,即使它们始终被提供并修改到服务器内存中也是如此。这意味着Redis速度很快,但这也是非易失性的;数据结构的实现会提高内存效率,因此与使用高级编程语言建模的相同数据结构相比,Redis内部的数据结构可能使用较少的内存;Redis提供了许多自然可以在数据库中找到的功能,例如复制,持久性的可调级别,集群,高可用性。
二、Redis服务安装(window)
Redis官网上的安装包只支持Linux,OSX,OpenBSD,NetBSD,FreeBSD系统,不支持window系统,Microsoft技术团队对redis进行修改,开发了一个支持window的redis(注意,此版本为2.6.12版本,支持String 、list、set、sortSet、hash等基本数据类型,能够满足普通的软件开发应用 );
Redis下载地址 https://pan.baidu.com/s/1bqPQZDBgfj1enB9QiTsOyQ 提取码 wxic
下载解压,点击start-server.bat启动redis
在这里插入图片描述
点击redis-cli.exe,实现客户端连接redis,
在这里插入图片描述
Redis默认密码为空,如果要设置密码,修改redis.conf文件配置 # requirepass foobared去掉注释,foobared改为自己的密码。注意:redis速度相当快,一个外部用户在一秒钟进行150K次密码尝试,需指定强大的密码来防止暴力破解
可以redis-cli客户端连接远程redis服务器,连接命令redis-cli -h host -p port -a password
三、Redis服务安装(Linux)
从redis的官网https://redis.io/download下载redis最新版安装包,此教程使用的版本为redis-5.0.5,其安装版为redis-5.0.5.tar.gz
上传安装包到Linux的/usr/loca/目录下,解压

cd /usr/local
tar -zxvf redis-5.0.5.tar.gz

安装

cd redis-5.0.5
make 

在这里插入图片描述
如果出现 /bin/sh:cc:未找到命令,说明么有安装gcc,需要安装gcc

yum install gcc-c++ -y
make MALLOC=libc

启动

cd src
./redis-server

在这里插入图片描述
有这个截图说明redis安装成功并启动,但是按CTRl+Z或者CTRL+C,redis服务器会停止,不可以进行远程连接,需要设置redis进场为守护进程,修改redis-5.0.5目录下redis.conf文件,把daemonize no改为daemonize yes,然后重新启动,启动时读取redis.conf配置文件
./redis-server …/redis.conf
打开防火墙6379端口

firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload

设置密码参考window版本安装的设置密码
设置开机启动

echo  '/usr/local/redis-5.0.5/src/redis-server /usr/local/redis-5.0.5/redis.conf' >> 
/etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

redis默认是不允许远程连接的,要开启远程连接需要修改redis-5.0.5目录下redis.conf文件,把bind 127.0.0.1注释,把protected-mode 设置为no,protected-mode=yes是启动保护模式,需配置bind ip或者设置访问密码
四、Redis配置文件详解

bind127.0.0.1 #绑定的主机地址,注释后所有接收所有情况
protected-modeyes # 是否开启保护模式,默认开启。没有配置指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。
port 6379 #指定redis监听端口
tcp-backlog 511 #此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn =2048,然后在终端中执行sysctl -p
timeout 0 #当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
tcp-keepalive 300 #如果设置不为0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有两个好处:检测挂掉的对端。降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。在Linux内核中,设置了keepalive,redis会定时给对端发送ack。检测到对端关闭需要两倍的设置值。
daemonize no #当为yes的时候,以守护进程的模式运行(后台运行)
supervised no可以通过upstart和systemd管理Redis守护进程,该参数是和具体的操作系统相关
pidfile /var/run/redis_6379.pid #当redis以守护进程方式运行时,默认写入pid的文件及路径
loglevel notice 日志级别,要用warning
logfile "" #指定了记录日志的文件。空字符串的话,日志会打印到标准输出设备。后台运行的redis标准输出是/dev/null
databases 16 数据库的数量,默认使用的数据库是DB 0。可以通过”SELECT “命令选择一个db
save 900 1 #900秒有1个key变化,就做一个保存到磁盘
save 300 10 #300秒有10个key变化,就做一个保存到磁盘
save 60 10000 #60秒有10000个key变化就做一个保存到磁盘
stop-writes-on-bgsave-error yes #如果启用了RDB快照(至少一个保存点)并且最新的后台保存失败,Redis将停止接受写入。
rdbcompression yes使用压缩rdb文件,rdb文件压缩使用LZF压缩算法,yes:压缩,但是需要一些cpu的消耗。no:#不压缩,需要更多的磁盘空间
rdbchecksum yes #是否校验rdb文件。从rdb格式的第五个版本开始,在rdb文件的末尾会带上CRC64的校验和。这跟有利于文件的容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗,所以如果你追求高性能,可以关闭该配置。
dbfilename dump.rdb #rdb文件的名称
dir./ #数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
slave-serve-stale-data yes #当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:1) 如果slave-serve-stale-data设置为yes(默认设置),从库会继续响应客户端的请求。2) 如果slave-serve-stale-data设置为no,除去INFO和SLAVOF命令之外的任何请求都会返回一个错误”SYNC with master in progress”
slave-read-only yes #作为从服务器,默认情况下是只读的(yes),可以修改成NO,用于写(不建议)
repl-diskless-sync no #是否使用socket方式复制数据。目前redis复制提供两种方式,disk和socket。如果新的slave连上来或者重连的slave无法部分同步,就会执行全量同步,master会生成rdb文件。有2种方式:disk方式是master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave。socket是master创建一个新的进程,直接把rdb文件以socket的方式发给slave。disk方式的时候,当一个rdb保存的过程中,多个slave都能共享这个rdb文件。socket的方式就的一个个slave顺序复制。在磁盘速度缓慢,网速快的情况下推荐用socket方式。
repl-diskless-sync-delay 5 #diskless复制的延迟时间,防止设置为0。一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输。所以最好等待一段时间,等更多的slave连上来。
repl-disable-tcp-nodelay no #是否禁止复制tcp链接的tcp nodelay[gs1] [gs2] 参数,可传递yes或者no。默认是no,即使用tcp nodelay。如果master设置了yes来禁止tcp nodelay设置,在把数据复制给slave的时候,会减少包的数量和更小的网络带宽。但是这也可能带来数据的延迟。默认我们推荐更小的延迟,但是在数据量传输很大的场景下,建议选择yes。
slave-priority 100 #当master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master。而配置成0,永远不会被选举。
appendonly no #默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件
appendfilename"appendonly.aof" sof文件名

appendfsynceverysec #aof持久化策略的配置
#no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快。
#always表示每次写入都执行fsync,以保证数据同步到磁盘。
#everysec表示每秒执行一次fsync,可能会导致丢失这1s数据。
no-appendfsync-on-rewrite no #在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行fsync会造成阻塞过长时间,no-appendfsync-on-rewrite字段设置为默认设置为no。如果对延迟要求很高的应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择。设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。Linux的默认fsync策略是30秒。可能丢失30秒数据。
auto-aof-rewrite-percentage 100 aof自动重写配置。当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候Redis能够调用bgrewriteaof对日志文件进行重写。当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程。
auto-aof-rewrite-min-size64mb #设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写
aof-load-truncatedyes#aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。重启可能发生在redis所在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项(redis宕机或者异常终止不会造成尾部不完整现象。)出现这种现象,可以选择让redis退出,或者导入尽可能多的数据。如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。如果是no,用户必须手动redis-check-aof修复AOF文件才可以。
lua-time-limit5000如果达到最大时间限制(毫秒),redis会记个log,然后返回error。当一个脚本超过了最大时限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一个可以杀没有调write命令的东西。要是已经调用了write,只能用第二个命令杀。
slowlog-log-slower-than10000 slog log是用来记录redis运行中执行比较慢的命令耗时。当命令的执行超过了指定时间,就记录在slow log中,slog log保存在内存中,所以没有IO操作。
#执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒,所以1000000就是1秒。注意,负数时间会禁用慢查询日志,而0则会强制记录所有命令。
slowlog-max-len128慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录会被删掉。这个长度没有限制。只要有足够的内存就行。你可以通过 SLOWLOG RESET 来释放内存。
latency-monitor-threshold0 #延迟监控功能是用来监控redis中执行比较缓慢的一些操作,用LATENCY打印redis实例在跑命令时的耗时图表。只记录大于等于下边设置的值的操作。0的话,就是关闭监视。默认延迟监控功能是关闭的,如果你需要打开,也可以通过CONFIGSET命令动态设置。
notify-keyspace-events""
#键空间通知使得客户端可以通过订阅频道或模式,来接收那些以某种方式改动了Redis 数据集的事件。因为开启键空间通知功能需要消耗一些 CPU ,所以在默认配置下,该功能处于关闭状态。
#notify-keyspace-events的参数可以是以下字符的任意组合,它指定了服务器该发送哪些类型的通知:
##K 键空间通知,所有通知以 __keyspace@__ 为前缀
##E 键事件通知,所有通知以 __keyevent@__ 为前缀
##g DEL 、 EXPIRE 、RENAME 等类型无关的通用命令的通知
##$ 字符串命令的通知
##l 列表命令的通知
##s 集合命令的通知
##h 哈希命令的通知
##z 有序集合命令的通知
##x 过期事件:每当有过期键被删除时发送
##e 驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送
##A 参数 g$lshzxe 的别名
#输入的参数中至少要有一个 K 或者 E,否则的话,不管其余的参数是什么,都不会有任何 通知被分发。详细使用可以参考http://redis.io/topics/notifications
hash-max-ziplist-entries512#数据量小于等于hash-max-ziplist-entries的用ziplist,大于hash-max-ziplist-entries用hash hash-max-ziplist-value64 #value大小小于等于hash-max-ziplist-value的用ziplist,大于hash-max-ziplist-value用hash。
list-max-ziplist-size-2
#the highestperforming option is usually -2 (8 Kb size) or -1 (4 Kb size),
#but if your use caseis unique, adjust the settings as necessary.
list-compress-depth0
set-max-intset-entries512 #数据量小于等于set-max-intset-entries用iniset,大于set-max-intset-entries用set。
zset-max-ziplist-entries128 #数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset。
zset-max-ziplist-value64 #value大小小于等于zset-max-ziplist-value用ziplist,大于zset-max-ziplist-value用zset。
hll-sparse-max-bytes3000#value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense)。一个比16000大的value是几乎没用的,建议的value大概为3000。如果对CPU要求不高,对空间要求较高的,建议设置到10000左右。
activerehashingyes#Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存。
client-output-buffer-limitnormal 0 0 0
##对客户端输出缓冲进行限制可以强迫那些不从服务器读取数据的客户端断开连接,用来强制关闭传输缓慢的客户端。
#对于normalclient,第一个0表示取消hard limit,第二个0和第三个0表示取消soft limit,normal client默认取消限制,因为如果没有寻问,他们是不会接收数据的。
client-output-buffer-limitslave 256mb 64mb 60 #对于slaveclient和MONITER client,如果client-output-buffer一旦超过256mb,又或者超过64mb持续60秒,那么服务器就会立即断开客户端连接。
client-output-buffer-limitpubsub 32mb 8mb 60 #对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器就会立即断开客户端连接。
hz10 #redis执行任务的频率为1s除以hz。
aof-rewrite-incremental-fsyncyes #在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值。

五、Redis工具
下载链接:https://pan.baidu.com/s/1EpiSptKVpeGcwTb15kBGyw 提取码 lgwd
解压点击redisclient-win32.x86.1.5.exe 启动
在这里插入图片描述
六、Redis数据类型

Redis不是简单的键值存储,它实际上是一个数据结构服务器,支持不同类型的值。这意味着,尽管在传统的键值存储中,您将字符串键关联到字符串值,但是在Redis中,该值不仅限于简单的字符串,还可以容纳更复杂的数据结构。
二进制安全字符串;
List:根据插入顺序排序的字符串元素的集合。它们基本上是链表;
Set:唯一,未排序的字符串元素的集合;
Sorted sets,但每个字符串元素都与一个称为score的浮点值相关联。元素总是按它们的分数排序,因此与Sets不同,可以检索一系列元素(例如,您可能会问:给我前10名或后10名);
Hashes,是由与值关联的字段组成的映射。字段和值都是字符串。这与Ruby或Python哈希非常相似;
Bit arrays(或简称为位图):可以使用特殊命令像位数组一样处理字符串值:您可以设置和清除单个位,计数所有设置为1的位,找到第一个设置或未设置的位,等等;
HyperLogLogs:这是一个概率数据结构,用于估计集合的基数;;
Streams:提供抽象日志数据类型的类地图项的仅追加集合。

参考:https://blog.csdn.net/zwc2xm/article/details/78663075

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章