美文网首页
Redis单节点搭建部署

Redis单节点搭建部署

作者: OPS_Joy | 来源:发表于2020-09-08 23:01 被阅读0次

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
1.下载Redis 官网https://redis.io/
2.解压--编译--安装【如果提示依赖包未安装,可根据提示进行安装】
[root@eby-db01 ~]# tar -zxf redis-4.0.2.tar.gz -C /usr/local/
[root@eby-db01 local]# cd redis-4.0.2/
[root@eby-db01 redis-4.0.2]# make MALLOC=libc
[root@eby-db01 redis-4.0.2]# cd src/
[root@eby-db01 src]# make install
3.优化配置文件,编辑redis.conf
开启密码验证:requirepass mypasswd
启动后台运行:daemonize yes
增加日志输出:logfile "/opt/redis-4.0.2/redis.log"
监听优化:bind 0.0.0.0,默认为127.0.0.1,只允许本机访问,可根据安全性是否修改
端口修改增加安全:port 6333 默认6379
4.启动redis
[root@eby-db01 redis-4.0.2]# ./src/redis-server redis.conf
[root@eby-db01 redis-4.0.2]# netstat -ntlp|grep 6333
tcp 0 0 0.0.0.0:6333 0.0.0.0: LISTEN 1896/./src/redis-se
[root@eby-db01 redis-4.0.2]# ps -ef|grep redis
root 1896 1 0 10:58 ? 00:00:04 ./src/redis-server 0.0.0.0:6333
root 3100 1589 0 12:45 pts/1 00:00:00 grep --color=auto redis
5.停止redis,如果没有密码 -a mypasswd可省略
[root@eby-db01 redis-4.0.2]#./src/redis-cli -a mypasswd shutdown
6.简单操作命令
[root@eby-db01 redis-4.0.2]# ./src/redis-cli -p 6333
127.0.0.1:6333> set myname abam
(error) NOAUTH Authentication required.
提示需要认证
[root@eby-db01 redis-4.0.2]# ./src/redis-cli -p 6333 -a mypasswd
127.0.0.1:6333> set myname abama
OK
127.0.0.1:6333> get myname
"abama"
127.0.0.1:6333> del myname
(integer) 1
127.0.0.1:6333> get myname
(nil)
127.0.0.1:6333> exit
7.redis一些其他运维常用命令
模糊查找key(支持正则,类似如下)
包含62的key: keys 62
已get开头的:keys get*
批量删除指定的key(-n 表示第几个库,默认为0)
redis-cli -a redis123456 -n 8 --scan --pattern "getC62"|xargs redis-cli -a redis123456 -n 8 del
切换到第8个库
select 8
8.使用info查看redis运行详情,比较重要指标
127.0.0.1:6379> info

#Server(服务器信息)
**redis_version:4.0.2   #版本号**
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:9ed64093486f3f37
**redis_mode:standalone   #运行模式,standalone为单机模式**
os:Linux 3.10.0-1062.12.1.el7.x86_64 x86_64
arch_bits:64  
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:1896
run_id:65f5a5dc24bf6b8eb7c95d04d18cee5dce464a60
tcp_port:6379
uptime_in_seconds:7315
uptime_in_days:0
hz:10
lru_clock:10818904
executable:/opt/redis-4.0.2/./src/redis-server
config_file:/opt/redis-4.0.2/redis.conf
#Clients(已连接客户端信息)
**connected_clients:3 #已连接客户端的数量(不包括通过slave连接的客户端**
client_longest_output_list:0
client_biggest_input_buf:0
**blocked_clients:0  #正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量**
#Memory(内存信息)
used_memory:938385  #由redis分配器分配的内存总量,以字节为单位
**used_memory_human:916.39K #以人类可读的格式返回redis分配的内存总量**
used_memory_rss:2240512
**used_memory_rss_human:2.14M  #从操作系统的角度,返回redis已分配的内存总量(俗称常驻集大小)。这个值和top命令的输出一致**
used_memory_peak:938385
used_memory_peak_human:916.39K   #redis的内存消耗峰值(以字节为单位)
used_memory_peak_perc:100.11%
used_memory_overhead:920656
used_memory_startup:835294
used_memory_dataset:17729
used_memory_dataset_perc:17.20%
total_system_memory:16656949248
total_system_memory_human:15.51G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:2.39
mem_allocator:libc
active_defrag_running:0
lazyfree_pending_objects:0
#Persistence(rdb和aof的持久化相关信息)
loading:0  #服务器是否正在载入持久化文件
rdb_changes_since_last_save:0 #离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化
rdb_bgsave_in_progress:0 #服务器是否正在创建rdb文件
rdb_last_save_time:1587874090 #离最近一次成功创建rdb文件的时间戳
**rdb_last_bgsave_status:ok #最近一次rdb持久化是否成功**
rdb_last_bgsave_time_sec:0 #最近一次成功生成rdb文件耗时秒数
rdb_current_bgsave_time_sec:-1 #如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数
rdb_last_cow_size:368640 #RDB过程中父进程与子进程相比执行了多少修改(包括读缓冲区,写缓冲区,数据修改等)
**aof_enabled:0 #是否开启了aof**
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
#Stats(一般统计信息)
total_connections_received:9
total_commands_processed:46
instantaneous_ops_per_sec:0
total_net_input_bytes:2277
total_net_output_bytes:10710
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:5
evicted_keys:0
keyspace_hits:4
keyspace_misses:3
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:190
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
#Replication(主从信息,master上显示的信息)
role:master
connected_slaves:0
master_replid:f62785819cab71d426b4e993c7664d70a860d40b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
#CPU(CPU计算量统计信息)
used_cpu_sys:3.12
used_cpu_user:2.27
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
#Cluster(集群相关信息)
cluster_enabled:0 #0表示未开启集群模式
#Keyspace(数据库相关的统计信息)
#db的key的数量,以及带有生存期的key的数,平均存活时间
db7:keys=2,expires=1,avg_ttl=1044710100
db8:keys=22,expires=19,avg_ttl=365139465

Redis常见数据类型
string:字符串
hash:哈希
list:列表
set:集合
redis采用定期删除和惰性删除(每隔一段时间,随机抽取一部分key,进行筛选,过期则删除)
当内存不足时,内存机制:
maxmemory-policy xxxxx
noeviction:当内存不足以容纳新写入数据时,新写入操作会报错
allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。推荐使用.
allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key
volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key
volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key
volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除

在并发高,流量大的情况下,注意一下点

  • 缓存穿透:故意去请求缓存中不存在的数据,导致所有的请求都怼到数据库上,从而数据库连接异常
    解决方案:
    (一)利用互斥锁,缓存失效的时候,先去获得锁,得到锁了,再去请求数据库。没得到锁,则休眠一段时间重试
    (二)采用异步更新策略,无论key是否取到值,都直接返回。value值中维护一个缓存失效时间,缓存如果过期,异步起一个线程去读数据库,更新缓存。需要做缓存预热(项目启动前,先加载缓存)操作。
    (三)提供一个能迅速判断请求是否有效的拦截机制,比如,利用布隆过滤器,内部维护一系列合法有效的key。迅速判断出,请求所携带的Key是否合法有效。如果不合法,则直接返回
  • 缓存雪崩:即缓存同一时间大面积的失效,这个时候又来了一波请求,结果请求都怼到数据库上,从而导致数据库连接异常。
    解决方案:
    (一)给缓存的失效时间,加上一个随机值,避免集体失效。
    (二)使用互斥锁,但是该方案吞吐量明显下降了
  • redis的并发竞争key问题
    1.redis事务机制(不推荐)
    2.加时间戳(多个系统要set一个值,对比时间戳)
  • redis持久存储
    RDB快照(指定多少秒,有多少写入,自动写入磁盘,也可以手动SAVE,推荐BGSAVE)
    SAVE:数据量过大,容易造成假死状态
    BGSAVE:复制一个新的进程写回磁盘
    AOF追加(直接kill程序。或者服务器中断,最后写入的数据会丢失)

相关文章

  • Redis 安装和集群环境搭建

    Redis 的安装部署非常简单,本文将按照 Redis 下载、单节点安装部署、集群环境搭建和常见问题解决几个部分加...

  • Redis单节点搭建部署

    REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写...

  • redis高可用

    1.有备无患-主从 redis单副本 Redis单副本,采用单个Redis节点部署架构,没有备用节点实时同步数据,...

  • Redis单节点部署

    1,安装编译环境 2,下载源码包 3,解压编译安装 4,启动Redis 5,将服务放到后台运行 6,验证

  • 基于docker的redis集群搭建

    redis 集群搭建 redis集群搭建包含两个主要步骤:一是搭建若干单节点redis服务器,二是启动集群控制进程...

  • 单机(win10)使用Docker搭建Redis集群(Redis

    搭建过程参考:使用Docker搭建Redis集群(Redis Sentinel 集群部署) 概述 Redis 集群...

  • redis实现分布式锁-redisson

    1、引入包: 2、redis在yml中的配置: 因为本地环境和测试环境的redis部署方式不同,本地为单节点,测试...

  • 15RabbitMQ单节点部署脚本

    单节点部署脚本RabbitMQ.sh 主从架构的搭建脚本RabbitMQ_Cluster_mq1.sh Rabbi...

  • Sentinel版Redis集群搭建

    部署Redis数据节点 1.启动主节点 配置:redis-6379.confport 6379daemonize ...

  • redis集群搭建总结

    redis的安装 集群的搭建 备注:redis集群需要至少要三个master节点,我们这里搭建三个master节点...

网友评论

      本文标题:Redis单节点搭建部署

      本文链接:https://www.haomeiwen.com/subject/chpkektx.html