1.redis是什么?
讲redis不得不讲nosql
- nosql不使用sql作为查询语言。
- nosql存储数据可以不需要固定的表格形式,它是基于键值对存储的。
redis的定义
- redis可以用作数据库、缓存、消息中间件。
- redis支持多种类型的数据结构。如字符串(String),散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)。
2.redis,memcached,mysql的比较
2.1 数据类型,存储方式的比较
数据库类型 | 数据存储方式 | 特色功能 |
---|---|---|
mysql | 硬盘持久化 | 事务 |
memcached | 内存 | |
redis | 硬盘持久化+内存 | 支持多种数据类型 |
2.2 内存缓存memcached、redis的比较
内存管理机制 | 持久化方案 | 缓存数据过期机制 | 支持的数据类型 | |
---|---|---|---|---|
memcached | 基于Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。通过空闲列表判断存储状态。 [类似于Java虚拟机对象的分配,空闲列表] |
不支持数据持久化操作,所有的数据都保存在内存中 | 不会监视数据是否过期,而在获取数据时才会检查数据是否已经失效。[类似与懒加载] | 只支持单一的KV键值对数据类型 |
redis | 现场申请内存的机制,由于分配内存是连续的,并且很少使用空闲列表来优化内存分配,会在一定程度上存在内存碎片 。[类似于Java虚拟机对象的分配,直接内存分配] |
支持rdb和aof两种不同的持久化方法。rdb属于全量数据备份,备份的是数据。aof数据增量备份,备份的是指令。 |
定时、定期等多种缓存失效策略 | 支持五种数据类型 |
3.redis作为数据库和作为缓存的选择
4.redis设置
4.1 远程连接设置
1.修改redis.conf配置文件
1 | 指定可以访问redis的网段。默认值是bind 127.0.0.1,只允许本地访问。 |
2.检查防火墙
1 | 检查6379端口是否开放 |
3.如果使用阿里云,记得开放阿里云安全组的端口
4.2 脚本启动redis认证密码
在使用脚本启动redis的时候,如果设置了redis密码,在进行service redisd stop
操作的时候会出现以下错误:
1 | (error) NOAUTH Authentication required |
此时,可以在/etc/init.d/redisd脚本文件中添加-a密码选项。
1 | 添加-a 密码选项 |
5.redis事务
5.1 MULTI 与 EXEC
MULTI