Redis笔记
一、NoSQL数据库简介
1.1技术发展引出NoSQL数据库的应用场景
技术的分类:
- 解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN
- 解决扩展性的问题:Struts、Spring、SpringMVC、Hibernate、Mybatis
- 解决性能的问题:NoSQL(redis)、Java线程、Hadoop、Nginx、MQ、ElasticSearch
1.1.1.Web1.0时代
Web1.0的时代,数据访问量很有限,用一夫当关的高性能的单点服务器可以解决大部分问题。
1.1.2.Web2.0时代
随着Web2.0的时代的到来,用户访问量大幅度提升,同时产生了大量的用户数据。加上后来的智能移动设备的普及,所有的互联网平台都面临了巨大的性能挑战。
1.1.3.解决CPU、内存及IO压力
1.2.NoSQL数据库简介
NoSQL(Not Only SQL ),意即不仅仅是SQL,泛指非关系型的数据库。 NoSQL不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。
- 不遵循SQL标准
- 不支持ACID
- 远超于SQL的性能
1.2.2.NoSQL适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
1.2.3.NoSQL不适用场景
- 需要事务支持
- 基于SQL的结构化查询存储,处理复杂的关系,需要及时查询的
1.2.4 Memcached 简介
- 出现的很早的NoSQL数据库,比Redis早
- 只支持简单的key-value模式,数据类型单一
- 底层采用单线程 + 锁的机制,相比Redis(单线程 + IO多路复用),它的效率更低
- 一般是作为缓存数据库辅助持久化的数据库,如MySQL
1.2.5 Redis 简介
- 几乎覆盖了Memcached的绝大部分功能
- 支持持久化,主要用作备份恢复
- 除了支持简单的key-value模式,还支持多种数据结构的存储,比如list,set,hash,zset等
- 底层使用单线程 + IO多路复用,效率高
- 一般是作为缓存数据库辅助持久化的数据库,如MySQL
二,Redis介绍
2.1 Redis 简介
Redis 是一个开源(BSD许可)的,由C编写的,高性能的基于key-vakue的NoSQL数据库。目前市场上大多数公司都采用redis来实现分布式缓存从而提高了数据的检索效率。
2.2 Redis 优点
-
它是基于内存存储减少io操作所带来的性能开销,读写性能高读11w/s,写8.1w/s。
-
提供了丰富的数据存储结构如 字符串(string), 散列(hash), 列表(list), 集合(set), 有序集合(sorted set)与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial)索引半径查询。
-
redis底层采用单线程实现数据的IO,所以在数据算法层面并不需要考虑并发安全性问题。Redis是单线程+多路IO复用技术。多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。
-
redis虽然是基于内存存储的但是它也支持两种持久化方式,避免因为服务器故障导致数据丢失的问题。
-
redis一般用来实现分布式缓存,从而降低应用程序对关系型数据库检索带来的性能影响。
-
redis应用场景:分布式锁,分布式队列,排行榜热点新闻的缓存,查找附近的人等功能。为复杂的应用提供非常方便的和成熟的解决方案。
三、Linux安装Redis
3.1 安装步骤
1.到redis官网下载redis-6.2.5.tar.gz压缩包,下载完成后使用FTP传输到Linux对应的目录下/usr/local(更改local目录的权限chmod 777 local,不然传输错误Permission is not allowed),传输完成使用命令tar -zxvf redis-6.2.5.tar.gz解压。
2.安装gcc,查看gcc版本命令:gcc - v(gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 高于4.2版本即可。
3.安装redis,使用命令make malloc=libc编译安装出现下面结果:
make test 编译测试出现下面结果:表示没有出错
输入命令:cd src && make install出现
4.启动redis服务: ./redis-server出现
redis服务会随着控制台的关闭而退出,所以我们将redis服务以后台进程的启动方式而启动。
5.配置为后台服务:
1)修改redis.conf文件vim redis.conf进入将no改成yes
2)将redis.conf复制到/etc/redis目录下,并改名为6379.conf,cd /etc–>mkdir redis – > cp /usr/local/redis-6.2.5/redis.conf ./ 将redis.conf拷贝到redis目录下后改名–>mv redis.conf 6379.conf
3)复制启动脚本到/etc/rc.d/init.d 并改名为redisd
4)修改复制后的redis文件,使之成为服务vim redisd进行修改
原始:
修改后:
设置开机启动并启动redisd脚本:
systemctl status firewalld查看防火墙状态 并添加redis端口 重新加载防火墙
修改redis密码:
3.2 报错与解决
四、Redis扩展知识
4.1 扩展点
1.默认16个数据库,类似数组下标从0开始,初始默认使用0号库
2.使用命令 select 来切换数据库,如: select 8
3.统一密码管理,所有库同样密码
4.dbsize查看当前数据库的key的数量
5.flushdb清空当前库
6.flushall通杀全部库
4.2 Redis IO模型
Redis采用单线程 + IO多路复用技术:多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态。比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。等到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。