Redis教程

redis

本文主要是介绍redis,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

cache:读缓存,是为了调节速度不一致的两个或多个不同物质的速度。例如cpu先从内存读,内存没有再读磁盘。

buffer:写缓冲,先将数据写入自己最近的地方,,例如cpu写数据会先写入内存。后续由内核写入磁盘

缓存保存位置及分层结构

用户层:浏览器DNS,应用程序DNS,操作系统DNS缓存

代理层:CDN,反向代理缓存

web层:web服务器缓存,解释器opcache

应用层:页面静态化

数据层:分布式缓存,数据库

系统层:操作系统cache

物理层:磁盘cache,raid cache

 

cache特性

自动过期  缓存数据有实效,超过时间自动删除

强制过期  源网站更新内容后CDN不会自动更新,需要强制让缓存过期

命中率  缓存的读取命中率

 

浏览器缓存过期机制

1 最后修改时间 last-modified。浏览器请求文件时,会获取last-modified和本地浏览器缓存的文件修改时间比较,如果一样,那么就会返回304,从缓存中读取内容。如果不一样,那么就会重新请求。需要向服务器发起请求才可以使用缓存

2 etag标记:是httpheader中代表资源的标签,在服务器端生成。如果有etag,下一次发送带有etag的请求事,etag没有变化将返回304。需要向服务器发起请求才可以使用缓存

3 过期失效时间expires:由服务端设置,在expires内都不会http请求,直接读取缓存。强制刷新除外。默认过期时间为30天。如果设置过期时间为1年,资源的失效是从客户端请求开始计算往后1年失效。

4 混合使用

    last-modified和expire混合使用

 etag和expire混合使用:判断expire,过期则发起http请求,然后根据etag返回200或者304

 三者混合使用:先判断expire,过期发送http请求,先判断last-modified,如果一致,再判断etag,还是一致,才能返回304

 

nosql数据库类别

临时性键值存储  memcached,redis

永久性键值存储 roma,redis

面向文档的数据库 mongob,couchdb

面向列的数据库 cassandra ,hbase

rbdms和nosql的对比

特点

  关系型数据库 nosql
特点

数据关系基于关系模型,结构化存储,完整性约束

基于二维表及其之间的联系

采用结构化的查询语言做数据读写

操作需要数据的一致性,需要事务甚至是强一致性

非结构化的存储

基于多维关系模型

具有特有的使用场景

优点

保持数据的一致性(事务处理)

可以进行join等复杂查询

通用性,技术成熟

高并发,大数据下读写能力较强

基于支持分布式,易于扩展,可伸缩

简单,弱结构化存储

缺点

数据读写必须经过sql解析,大量数据,高并发下读写性能不足

对数据读写,或修改诗句结构时需要加锁,影响并发操作

无法适应非结构化存储

扩展困难

复杂

jion等复杂操作能力弱

事务支持弱

通用性差

无完整约束复杂场景支持较差

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

redis对比memcached

支持数据的持久化:能将内存中的数据保存在磁盘中,重启redis服务或者服务器可以从备份文件中恢复数据到内层中继续使用

支持更多的数据类型:string,hash,list,set,zset

支持数据的备份:可以实现类似于数据的master-slave模式的数据备份,也支持使用快照和aof

支持更大的value数据:memcache单个key value最大只支持1mb,redis最大支持512mb,生产不建议超过2m

在redis6版本前,redis是单线程,memcache是多线程,单机情况下并发不高,但是支持分布式集群可以实现数万并发

都是基于c语言开发

 

redis典型应用场景

session共享:常见于web集群中的tomcat

缓存:数据查询,电商网站商品信息,新闻内容

计数器:访问排行榜,浏览数等和次数相关的数值统计场景

微博微信:共同好友,粉丝数,关注,点赞评论等

消息队列:elk的日志缓存

地理位置:摇一摇,附近的人,外卖等

 

编译安装redis

---------------------------------------------------------

yum -y install gcc jemalloc-devel    下载依赖

wget http://download.redis.io/releases/redis-5.0.3.tar.gz

tar xvf redis-5.0.3.tar.gz

cd redis-5.0.3/

make PREFIX=/apps/redis install    安装目录自定义

echo 'PATH=/apps/redis/bin:$PATH' > /etc/profile.d/redis.sh  

. /etc/profile.d/redis.sh

mkdir /apps/redis/{etc,log,data,run}  创建配置文件,日志,数据等

cp /app/redis-5.0.3/redis.conf  /apps/redis/etc/    将redis.conf拷贝到安装目录etc下

redis-server redis.conf   前台启动redis

 

 

 可以开启redis多实例

redis-server  --port 6380

chown -R redis.redis /apps/redis/              很重要

-----------------------------------------------

解决启动时的警告

1.vim /etc/sysctl.conf

net.core.somaxconn=1024

vm.overcommit_memory=1

 

2.echo 'echo nerver' > /sys/kernel/mm/transparent_hugepage/enabled'  >> /etc/rc.d/rc.local

chmod +x /etc/rc.d/rc.local

---------------------------------------------------

编辑redis的systemd启动文件,复制yum安装的进行修改路径

 

验证redis启动

systemctl daemon-reload      systemctl enable --now redis

 

 

 

 

-----------------------------------------------------

多实例部署

 

 

将原来的redis.conf修改redis_6379.conf,红色为修改部分

bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /apps/redis/run/redis_6379.pid
loglevel notice
logfile "/apps/redis/log/redis_6379.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /apps/redis/data/
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly_6379.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

修改完后复制成redis_6380.conf  ,redis_6381.conf。对应的systemd启动文件复制修改(改下对应的配置文件名字即可)。其他的不需要动。data,log,pid会自动生成。

 

 

 

 

 启动!!!systemctl daemon-reload           systemctl enable --now redis_6379 redis_6380 redis_6381

 

这篇关于redis的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!