简介
NoSql,Not Only SQL(不仅仅是SQL),NoSql采用数据集存储、动态结构定义、存储精简、扩展性强;
NoSql数据分为键值存储数据库、列存储数据库、文档型数据库、图形数据库、对象存储、xml数据库
Redis
reids觉得是NoSql数据库中使用最多最广泛的一种,其最大的特点就是分布式缓存,随着集群设计的逐步普及,很多项目之后为了提高程序处理性能往往会使用缓存,但是在集群的环境下需要考虑到所有的服务都能获得数据,所有才需要建立分布式缓存。
当程序之后使用可缓存之后可以有效的缓解高并发下数据库出现的查询性能瓶颈,缓解数据库的压力
Redis是有C语言开发的内存高速缓存数据库,是一个开源的键值数据库。支持丰富的数据类型:如string、hash、set、list、zset、GEO、steam。
Redis的特点:
- 异常快速:redis速度非常快,每秒可执行大约110000设置操作,81000个/没面的读取操作
- 支持丰富的数据类型
- 原子操作:redis的每一步操作都是原子操作,从而确保多个客户端同时访问时可以得到最新的值
安装
- 解压下载好的redis源码包
tar -zxvf redis-5.0.6.tar.gz -C /usr/local/src/
- 进入解压后的目录
cd /usr/local/src/redis/
- redis6开始需要gcc版本大于 5.3 才能编译,需要升级新版gcc,配置永久⽣效
# 查看gcc版本
gcc -v
# 升级新版gcc,配置永久⽣效
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable">>/etc/profile
- 编译源码
make
- 安装到指定⽬录
mkdir -p /usr/local/redis
make PREFIX=/usr/local/redis install
- 将所有的内存资源交由Redis管理,追加内存分配策略
echo "vm.overcommit_memory=1">>/etc/sysctl.conf;
/sbin/sysctl -p;
配置redis
- 建立一个Redis可执行程序的目录
mkdir -p /usr/local/redis/{bin,conf}
bin目录:保存所有可执行文件
conf目录:保存Redis相关配置文件
- 将编译后的程序拷贝到bin目录中
cp /usr/local/src/redis/src/redis-server /usr/local/redis/bin/
cp /usr/local/src/redis/src/redis-cli /usr/local/redis/bin/
cp /usr/local/src/redis/src/redis-benchmark /usr/local/redis/bin/
- 拷贝配置文件模板到conf目录中
cp /usr/local/src/redis/redis.conf /usr/local/redis/conf/
- 创建数据保存目录
mkdir -p /usr/data/redis/{run,logs,dbcache}
run:保存Redis进程启动时的进程编号信息
logs:保存所有的Redis当前服务进程日志信息
dbcache:保存所有的缓存数据
- 打开配置redis.conf配置文件,修改相关配置项
vim /usr/local/redis/conf/redis.conf
port 6379 # Redis服务端口号
daemonize yes # Redis是否为后台启动
pidfile /usr/data/redis/run/redis_6379.pid # 设置进程编号的保存路径
logfile "/usr/data/redis/logs/redis_6379.log" # 设置相关的日志存储目录
databases 16 # 在一个数据库中可以有多少个不同的缓存数据库(0~15)
dir /usr/data/redis/dbcache # 持久化文件存储路径
- 启动Redis
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.con
- 输入:ps -ef|grep redis 查看是否启动成功
root 1405 1278 0 10:49 pts/0 00:00:00 grep --color=auto redis
- 使用redis-cli命令连接数据库
/usr/local/redis/bin/redis-cli
127.0.0.1:6379>
redis安全配置
当前redis只能由本机访问,要想所有的地址都能访问还需要做一些配置
- 打开配置redis.conf配置文件,修改相关配置项
vim /usr/local/redis/conf/redis.conf
bind 0.0.0.0 #任何ip可以访问
- 设置用户名和密码
requirepass shuxiaolong
- 持久化文件名称
dbfilename rsthe.rdb
- 持久化策略, 10秒内有个1个key改动,执行快照
save 10 1
- 杀死进程,重新启动
ps -ef|grep redis
kill pid
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.con
- 连接客户端
/usr/local/redis/bin/redis-cli -h localhost -p 6379 -a shuxiaolong
Redis到此安装完成
基本操作
Redis通用命令
-
exists:判断Key是否存在
-
del:删除key
-
type:判断Key的类型
-
ttl:查询key存活时间
支持多种类型的数据结构
字符串(strings)、散列(hashes)、 列表(lists)、 集合(sets)、 有序集合(sorted sets)
-
string:存储字符串类型的 key-value
-
常⽤命令: set/get/increment/decrement/del
-
应⽤场景:验证码、计数器、订单重复提交、⽤户登录信息、商品详情
-
-
list:字符串列表,按照插入顺序排序;双向链表,插入删除时间复杂度O(1)快,查找为O(n)慢
-
应用场景:简单队列、最新商品列表、评论列表
-
常用命令:
-
-
hash:是一个string类型的field和value的映射表,hash特别适合用于存储对象
-
应⽤场景:购物⻋存储、⽤户对象
-
常用命令:
-
-
set:将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略
-
应⽤场景:⼤数据⾥⾯的⽤户画像标签集合、社交应⽤⾥⾯的共同好有
-
常用命令:
-
-
sortedSet:用于将一个或多个成员元素及其分数值加入到有序集当中;如果某个成员已经是有序集的成员,那么更新这个成员的分数值,分数值可以是整数值或双精度浮点数。;有序集合可以看做是在Set集合的的基础上为集合中的每个元素维护了一个顺序值: score,它允许集合中的元素可以按照score进行排序
-
应⽤场景:商品⽇销榜、积分榜、朋友圈文章点赞-取消,逻辑:用户只能点赞或取消,统计一篇文章被点赞了多少次,可以直接取里面有多少个成员
-
常用命令:
-