1.Redis基础
特性
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性
- Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
- Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
2.Redis安装
windows
https://github.com/MSOpenTech/redis/releases
#打开一个 cmd 窗口 使用 cd 命令切换目录到 C:\redis 运行:
redis-server.exe redis.windows.conf
#另一cmd窗口
redis-cli.exe -h 127.0.0.1 -p 6379
set myKey abc
get myKey
Linux安装
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xzf redis-2.8.17.tar.gz
cd redis-2.8.17
make
#默认配置运行
cd src
./redis-server
#以配置文件运行
cd src
$ ./redis-server ../redis.conf
#测试
cd src
./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
3.Redis配置
#获取config配置
CONFIG GET CONFIG_SETTING_NAME
#例如
CONFIG GET loglevel
#修改config配置
CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
#例如
CONFIG SET loglevel "notice"
注
守护进程(Daemon Process)
也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。由于在 linux 中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。
4.Redis外网访问
由于 redis 采用的安全策略,默认会只准许本地访问。需要通过简单配置,完成允许外网访问。
修改 redis 的配置文件,将所有 bind 信息全部屏蔽。
bind 192.168.1.100 10.0.0.1
bind 192.168.1.8
bind 127.0.0.1
修改完成后,需要重新启动 redis 服务。
修改 Linux 的防火墙(iptables),开启你的 redis 服务端口,默认是 6379。
-A INPUT -m state –state NEW -m tcp -p tcp –dport 6379 -j ACCEPT
……
-A INPUT -j REJECT –reject-with icmp-host-prohibited
一定要将 redis 的防火墙配置放在 REJECT 的前面。然后执行
service iptables restart
至此,就能够链接到 redis 服务,并且能够正确显示了
redis-cli -h host -p port -a password
redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
5.Redis键操作
#添加键值
set key value
#查找键值
get key
#删除键值
del key
6.非关系型数据库的特点
6.1 数据模型比较简单
6.2 数据库性能要求高
6.3 不需要高度的数据一致性
7.redis进阶
高可靠:
通过对缓存数据做持久化防止掉电丢失
RDB:定时将数据持久化到硬盘
AOF:每次做缓存更新操作,都将操作保存到日志中,安全性更高。
高可用:
搭建redis集群,防止因单节点宕机引起全部宕机。
8.redis集群策略
- 主从模式
主读写+(从1可读,从2可读,......)
缺点:单主节点宕机全部崩盘 - 哨兵模式
主读写+(从1可读,从2可读,......)+哨兵节点
作用:主节点宕机时在从节点之间选举一个升级为主节点。主节点恢复后成为新从节点。
缺点:结构固定,无法实现分布式 - 集群模式
主1读写+(从1可读,从2可读,......)
+
主2读写+(从1可读,从2可读,......)
+
应用:redis高并发写入会变慢,原因是只有一台节点可写入,AOF机制限制redis 性能,而多从节点保证读速度不会有太大的变化。
解决办法:加主节点或加ssdb数据库
......
多主节点防止主节点宕机,可实现分布式结构,自由添加删除主从
9.redis与memcache
redis强调单线程多集群,侧重高可靠,多实例处理问题,适合大项目
memchche强调多线程单机,侧重高可用,节省成本,适合小项目
10. 解决高并发
前端:keepalived→nginx→(nginx1+nginx2)
动静分离,负载均衡
后端(瓶颈区):mysql分表分库,定时job,主从集群,读写分离,数据库缓存
网友评论