Redis入门与安装
Redis入门
从自己之前做的笔记整理 可能有点混乱 会慢慢修改
NoSQL
入门概述
- 为什么用nosql?
90年代 一个网站的访问量 一般都不大 单个数据库 完全可以轻松应付.
- 在那个时候 更多的都是静态网页 动态交互类型的网站不多,随着访问量上升 几乎大部分的mysql架构的网站 在数据库上都开始出现了性能问题
- web程序 不再仅仅专注在功能上 同时也追求性能 程序员开始大量使用缓存技术来缓解数据库的压力 优化数据库的结构和索引 由于数据库的写入压力增加 而Memcached只能缓解数据库的读取压力;
- 读写集中在一个 数据库上让数据库 不堪重负 大部分网站开始使用 主从复制技术来达到读写分离 以提高读写性能和读库的扩展性 Mysql的master-slave模式成为 这个时候网站标配
- 数据量的持续猛增,由于MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎代替MyISAM。 时,开始流行使用分表分库来缓解写压力和数据增长的扩展问题。这个时候,分表分库成了一个热门技术,是面试的热门问题也是业界讨论的热门技术问题。
- 也就在这个时候,MySQL推出了还不太稳定的表分区,这也给技术实力一般的公司带来了希望。虽然MySQL推出了MySQL Cluster集群,但性能也不能很好满足互联网的要求,只是在高可靠性上提供了非常大的保证。 用户生成的数据和用户操作日志已经成倍增加 传统的sql数据库已经不适合
是什么?
NoSQL = not only sql 不仅仅是sql
泛指非关系型的数据库 这些类型的数据存储 不需要固定的模式 无须多余操作就可以横向扩展
能干嘛?
易扩展
nosql数据库种类繁多 但是有一个共同的特点都是 去掉关系型数据库 的 关系型特征
数据之间无关系 这样就非常容易拓展 也无形之间 在架构的层面上带来了可扩展的能力
大数据量高性能
nosql数据库都具有非常高的读写性能 尤其在大数据量下 得益于无关系性
一般mysql使用 query cache 每次表的更新 cache就失效 是一种大粒度的cache
在针对web2.0的交互频繁的应用 cache性能不高 而nosql的cache是记录级的 是一种细粒度的cache 所以nosql在这个层面上来说 性能高很多
多样灵活的数据类型
无须实现为要储存的数据建立字段 随时可以存储自定义 数据格式
去哪下?
Redis Memcache Mongdb
怎么玩?
KV
Cache
Persistence
3v+3高
海量volume 多样 variety 实时velocity
高并发 高可扩 高性能
CAP理论
之后会另开一帖总结
Redis:Remote DIctionary Server(远程字典服务器)
是完全开源免费的,用C语言编写的,遵守BSD协议,
是一个高性能的(key/value)分布式内存数据库,基于内存运行
并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,
也被人们称为数据结构服务器
Redis能干嘛?
- Redis是一个开源的k-v存储系统,和Memcached类似,它支持存储的value类型相对更多,包括string,list,set,zset(sorted set有序集合)和hash(哈希类型)
这些数据都支持push/pop,add/remove及取交集并集和差集以及更丰富的操作,而且这些操作都是原子性的.
在此基础上redis支持各种不同方式的排序,和memcached一样,数据都是缓存在内存中,不一样的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从同步). - 内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
- 取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面
- 模拟类似于HttpSession这种需要设定过期时间的功能
- 发布、订阅消息系统
- 定时器、计数器
Redis 与其他 key - value 缓存产品有以下三个特点
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
- Redis支持数据的备份,即master-slave模式的数据备份
redis怎么玩
- 数据类型、基本操作和配置
- 持久化和复制,RDB/AOF
- 事务的控制
- 复制
- …
redis安装
一般安装在 linux下
- 如果之前安装过先卸载
1 | shell> ps -ef | grep redis |
- 下载并解压,然后安装
1 | shell> wget http://download.redis.io/releases/redis-6.0.1.tar.gz |
如果遇到
Error: Executing test client: couldn’t execute “src/redis-benchmark”:
no such file or directory.[压测时,找不到可执行文件]
修复: 清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件【等同于make clean】 同时也将configure生成的文件全部删除掉,包括Makefile文件
1 | shell> sudo make distclean |
设置redis.conf里的io-threads-do-reads yes
设置redis.conf里的io-threads 【线城数量,CPU核数*2/3】
- 查看默认安装目录 usr/local/bin
- 启动
- 备份 redis.conf(关于redis.conf文件详解 会另开一帖)到其它目录例如/myredis
- conf文件的daemonize no改成yes,允许服务在后台启动
- 使用备份的conf文件启动 执行 redis-server /myredis/redis.conf
- 查看是否启动成功
1
ps -ef | grep redis
- 用客户端访问:Redis-cli
- 测试验证: ping
- 其它提示:
redis里面不分用户 只分密码 所有库统一密码 要么都成功链接要么都连不上
退出客户端 exit
平时连接必须ip地址 客户端
redis-cli -h 127.0.0.1 -p 6379
redis默认有16个数据库,从0开始,初始默认使用0号库
切换数据库使用命令
1 | select <id> |
Docker下Redis安装
- 拉取 redis 镜像
1 | docker search redis |
- 查看本地镜像是否拉取成功
1 | docker images |
- 因为 redis 默认配置你会发现只能够本地连接,不能进行远程访问,使用 Redis Desktop Manager连接都会报错,因此需要手动挂载 redis 配置文件
1 | #新建两个文件夹用于挂载配置 |
在conf文件夹中增加配置文件 redis.conf
1 | #bind 127.0.0.1 //允许远程连接 |
- 创建并运行容器
–name 给容器起一个名
-p 端口映射 宿主机:容器( 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务。)
-v 挂载自定义配置 自定义配置:容器内部配置
-d 后台运行
//redis-server 使用指定的配置文件启动
1 | docker run --name redis -p 6379:6379 -v /docker/redis/data:/data -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf |
- 启动成功 查看容器启动状态
1 | docker ps |
- 容器内部链接测试
注意如果出现该错误:(error) NOAUTH Authentication required.
说明没有输入密码进行验证,请输入:auth 你的密码
1 | [root@uehost /]# docker exec -it myredis redis-cli |
7、远程连接 使用 redis desktop manager 连接
资料参考:尚硅谷