redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。
它是一个非关系型数据库
NoSQL数据库介绍1.技术发展
技术的分类
1.解决功能性的问题:如 Java、Jsp、Tomcat、Linux、JDBC、SVN 2.解决扩展性的问题:Struts、Spring、SpringMVC、Hibernate、Mybatis 3.解决性能的问题:NoSQL、java线程、Nginx、MQ、ElasticSearchNoSQL的概述
Nosql不只是SQL泛指非关系型的数据库。
Nosql不依赖业务逻辑方式存储、而已简单的key-value模式存储。因此大大增加了数据库的扩展能力。
不遵循SQL标准 不支持ACID 远超SQL的性能NoSQL的适用场景
1、数据模型比较简单; 2、需要灵活性更强的IT系统; 3、对数据库性能要求较高; 4、不需要高度的数据一致性; 5、对于给定key,比较容易映射复杂值的环境。NoSQL不适用场景
6.对数据高并发的读写
7.海量数据的读写
8.对数据高可扩展性的
需要事务支持 基于sql的结构查询存储,处理复杂的关系,需要既席查询 (用不着sql和用了sql也不行的情况、请考虑用nosql)NoSQL的特点
1、易扩展
NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间,在架构的层面上带来了可扩展的能力。
2、大数据量、高性能
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。
一般MySQL使用Query Cache。NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说性能就要高很多。
3、灵活的数据模型
NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是——个噩梦。这点在大数据量的Web 2.0时代尤其明显。
4、高可用
NoSQL在不太影响性能的情况,就可以方便地实现高可用的架构。比如Cassandra、HBase模型,通过复制模型也能实现高可用。
MecacheRedis
MongoDB
Hbase
Cassandra
概述和安装 Redis的概述
Redis是一个开源的key-value存储系统
Redis五种数据类型分别是string(字符串),hash(哈希),list(列表),set(集合)及sort set (有序集合)
这些数据都支持 push/pop、add/remove及职交集和差集更丰富的操作,而且这些操作都是原子性的。
在此基础上、Redis支持不同方式的排序
为了保证效率、Redis的数据都是缓存在内存中的。
Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件中
Redis的应用高频率、热门访问的数据、降低数据库IO
分布式架构、做session共享
Redis的安装打开官网
https://redis.io/download/
下载地址https://download.redis.io/releases/redis-6.2.7.tar.gz
windows下载安装redis6redis6以下去GitHub进行修改下载地址如下:
https://github.com/tporadowski/redis/releases
Redis-6.2.7下载下载地址:https://download.redis.io/releases/redis-6.2.7.tar.gz
编译Redis需要gcc和make,我们就用MSYS2来提供gcc和make环境。
先下载MSYS2,我用的清华的源 https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/x86_64/
里面有安装版(后缀是exe)和免安装版(后缀是 tar.xz),我选的免安装版
下载解压,然后需要给pacman(msys2的软件管理器)换一下国内源(参考自清华的换源教程 。
换源很简单,在 解压后的msys2目录下的 /etc/pacman.d/ 里有这三个文件
文件里自带清华源的地址,把地址放到第一行就可以了(一定要放在第一行),三个文件都要改。这三个地址是不一样的,别把地址写错了。
地址分别是:
后缀为mingw32的: Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686 mingw64的: Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64 msys的: Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
然后双击 msys2.exe 打开msys2,第一次运行会初始化一下。
初始化完在msys2里执行刷新软件包数据的命令:
pacman -Syu
就可以下载gcc和make了:
pacman -S gcc make
然后去github下载Redis的源码,也可以在上一步顺便安装git来下载源码。
源码地址:https://github.com/redis/redis
不想下载不稳定版可以在左上角选择版本:
下载的是压缩包要先解压下,然后在msys2里cd进入解压后的目录。Windows的C盘对应 /c ,我的解压在了 D:/redis/ 目录下,所以对应的目录是 /D/redis
cd /D/redis/
例如
然后直接编译就可以了, PREFIX= 后面的目录是要把Redis生成到哪里
make PREFIX=/e/Msys2/tmp install
中间会出一些警告,不影响编译,问题不大。如果看上图那个未找到命令不顺眼,可以执行 pacman -S pkg-config 。
编译Redis 6.2预览版时(不是这个版本的跳过这一步):
出现 “错误:未知的类型名‘Dl_info’”:(此时会编译失败)
找了找问题,是 /usr/include/dlfcn.h 这个文件由于 #if 的选项导致没有去定义 Dl_info 这个结构体。
解决方式:
进入 msys2 所在目录的 usr/include/ 下,找到 dlfcn.h ,复制站贴做个备份。
然后打开 dlfcn.h ,找到 Dl_info定义的地方,删除上面的 #if 和下面的 #endif 两行,再次编译即可。
编译完之后记得恢复备份
编译完就可以在刚才指定的目录里看到Redis了:
最后在Msys2目录里搜索 dll文件,找到 msys-2.0.dll 复制下来
放到Redis目录就可以了
记得把 redis.conf 和 sentinel.conf 这两个配置文件也复制过去
现在除了之前 make PREFIX=xxx install 这一步里指定的 xxx 这个文件夹(这里是 tmp 文件夹),其他的都没用了可以删了。
换成cmd,运行一下
启动服务:
启动客户端:
完成
安装在Linux#把文件先上传的Linux中 /opt 目录下 上传完成进行查看验证 #进入 opt cd /opt #查看 ls #查看是否存在gcc gcc --version #下载使用gcc yum install gcc #验证是否安装成功 gcc --version #查看 ls #解压 tar -zxvf redis-6.2.6.tar.gz #查看 ls #进入redis中src下 cd redis-6.2.7/src #make编译 make #如果没有问题则执行 make install PREFIX=/usr/local/redis #安装完成后则会在cd /usr/local/redis下生成内容 cd /usr/local/redis/bin ll #前台启动不推介 redis-server #后台启动 备份redis.conf 拷贝一份redis.conf到其他目录 mkdir /usr/local/redis/etc mv /root/redis-6.2.7/redis.conf /usr/local/redis/etc #进入etc目录 cd /etc #查看 ll 后台设置启动daemonize no改为yes bind 127.0.0.1改为0.0.0.0 #允许外部连接 daemonize no 改为yes #允许后台启动 appendonly no 改为yes #持久化 修改peotected-mode yes 改为no #protected-mode参数是为了禁止外网访问redis,如果启用了,则只能够通过localhost ip (127.0.0.1)访问Redis requirepass 123456 #密码 #退出 :wq #进入/usr/local/bin cd /usr/local/bin #查看 ls #后台启动 redis-server /etc/redis.conf #查看是否启动 ps -ef | grep redis
解决方案:运行make distclean
安装目录的介绍
配置开机自启动
开启自启动配置的是systemd的方式。
1.创建redis.service文件
进该目录/etc/systemd/system后 ,创建redis.service文件,并编写脚本,如下是操作命令。
vi /etc/systemd/system/redis.service
脚本内容如下
# 如下是脚本内容,将内容复制进redis.service文件中
[Unit] # 自定义的服务描述 Description=redis-server # 依赖,在network服务之后启动 After=network.target [Service] Type=forking # redis启动的命令 ExecStart=/usr/local/redis/bin/redis-server /usr/local/etc/redis.conf # redis重启的命令 ExecReload=/usr/local/redis/bin/redis-server -s reload # redis停止的命令 ExecStop=/usr/local/redis/bin/redis-server -s stop PrivateTmp=true [Install] WantedBy=multi-user.target
2.设置开机自启
编辑保存redis.service文件后,启动该服务
# 重新加载所有的service服务
systemctl daemon-reload
#配置镜像
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置redis.service开机自动
systemctl enable redis.service
# 启动redis 服务
systemctl start redis.service
3.设置redis客户端软连接
设置软连接后,就只用输入redis即可连接redis服务端了
cp /usr/local/redis/bin/redis-cli /usr/bin/redis-cli cp /usr/local/redis/bin/redis-server /usr/bin/redis-server # 软链接方式 ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis-cli
#创建成功后就可以在本机直接使用 redis 连接
#redis #auth 213121
4.redis服务操作命令
systemctl start redis.service #启动redis服务 systemctl stop redis.service #停止redis服务 systemctl restart redis.service #重新启动服务 systemctl status redis.service #查看服务当前状态 systemctl enable redis.service #设置开机自启动 systemctl disable redis.service #停止开机自启动
测试
#启动redis redis-cli #redis的关闭 redis-cli shutdown单实例关闭 或者ps -ef |grep redis #查询redis进程 kill -9 xxx #杀死进程
Redis介绍的相关知识
key健操作
#进入redis /usr/local/bin/redis-cli #查看当前库中所有的key keys * #添加key set k1 lucy set k2 mary set k3 jack #判断key是否存在 exists k1 1是存在0是不存在 #查看健是什么类型 type k1 #删除key del k3 unlink k3 #异步删除 #设置过期时间10是10秒 expire key 10 #查看还有多少秒过期,-1表示永不过期,-2表示已近过期 #切换数据库 select 3 #查看当前表还有多少key dbsize #清理当前库 flushdb #清理所有库 flushall