Redis(非关系型数据库)
文章目录
-
- Redis(非关系型数据库)
- [认识Redis(Remote Dictionary Server)](#认识Redis(Remote Dictionary Server))
-
- 1.Redis的基本介绍
- 2.Redis的应用场景
-
- [2.1 取最新N个数据的操作](#2.1 取最新N个数据的操作)
- [2.2 排行榜应用,取TOP N操作](#2.2 排行榜应用,取TOP N操作)
- [2.3 需要精准设定过期时间的应用](#2.3 需要精准设定过期时间的应用)
- [2.4 计数器应用](#2.4 计数器应用)
- [2.5 Uniq 操作,获取某段时间所有数据排重值](#2.5 Uniq 操作,获取某段时间所有数据排重值)
- [2.6 实时系统,反垃圾系统](#2.6 实时系统,反垃圾系统)
- [2.7 缓存](#2.7 缓存)
- 3.Redis的特点
- Redis单机环境安装
-
- [1. Windows版Redis安装](#1. Windows版Redis安装)
- 2.Linux版Redis安装(运维)
-
- 2.1下载redis安装包
- [2.2 解压redis压缩包到指定目录](#2.2 解压redis压缩包到指定目录)
- [2.3 安装C程序运行环境](#2.3 安装C程序运行环境)
- [2.4 安装较新版本的tcl](#2.4 安装较新版本的tcl)
- [2.5 编译redis](#2.5 编译redis)
- [2.6 启动redis](#2.6 启动redis)
- [2.7 关闭redis](#2.7 关闭redis)
- [2.8 连接redis客户端](#2.8 连接redis客户端)
- [3.Redis Desktop Manager](#3.Redis Desktop Manager)
- Redis的数据类型
SQL :关系型数据库
-
1.结构化(Structured)
-
2.关联的(Relational)
-
3.SQL查询
SELECT id,name,age from tb_user WHERE id=1
-
4.事务ACID(原子性,一致性,隔离性,持久性)
NoSQL:非关系型数据库
-
1.非结构化
-
2.无关联的
-
3.非SQL
get user:1
-
4.BASE
总结
NoSQL数据库
memcache
很早出现的NoSql数据库
数据都在内存中,一般不持久化
支持简单的key-value模式
一般是作为缓存数据库辅助持久化的数据库
redis介绍
几乎覆盖了Memcached的绝大部分功能
数据都在内存中,支持持久化,主要用作备份恢复
除了支持简单的key-value模式,还支持多种数据结构的存储,比如 list、set、hash、zset
等。
一般是作为缓存数据库辅助持久化的数据库
现在市面上用得非常多的一款内存数据库
mongoDB介绍
高性能、开源、模式自由(schema free)的文档型数据库
数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘
虽然是key-value模式,但是对value(尤其是json)提供了丰富的查询功能
支持二进制数据及大型对象
可以根据数据的特点替代RDBMS,成为独立的数据库。或者配合RDBMS,存储特定的数据
列式存储HBase介绍
HBase是 **Hadoop** 项目中的数据库。它用于需要对大量的数据进行随机、实时读写操作的场
景中。HBase的目标就是处理数据量非常庞大的表,可以用普通的计算机处理超过 10 亿行数
据,还可处理有数百万列元素的数据表。
认识Redis(Remote Dictionary Server)
远程词典服务器,是基于内存的键值型NoSQL数据库
特征:
- 键值(key-value)型,value支持多种不同数据结构,功能丰富
- 单线程,每个命令具备原子性
- 低延迟,速度快(基于内存,IO多路复用,良好的编码)。
- 支持数据持久化
- 支持主从集群,分片集群
- 支持多语言客户端
redis官网地址:
https://redis.io/ (https://redis.io/)
中文网站
http://www.redis.cn/ (http://www.redis.cn/)
1.Redis的基本介绍
Redis是当前比较热门的NoSQL系统之一
它是一个开源的、使用ANSI C语言编写的 key-value 存储系统(区别于MySQL的二维表格
形式存储)
和Memcache类似,但很大程度补偿了Memcache的不足,Redis数据都是缓存在计算机 内
存 中,不同的是,Memcache只能将数据缓存到内存中,无法自动定期写入硬盘,这就表
示,一断电或重启,内存清空,数据丢失
2.Redis的应用场景
2.1 取最新N个数据的操作
比如典型的取网站最新文章,可以将最新的 5000 条评论ID放在Redis的List集合中,并将超出集合部分从数据库获取
2.2 排行榜应用,取TOP N操作
这个需求与上面需求的不同之处在于,前面操作以时间为权重,
这个是以某个条件为权重,
比如按顶的次数排序,可以使用Redis的sorted set,将要排序的
值设置成sorted set的
score,将具体的数据设置成相应的value,每次只需要执行一条
ZADD命令即可。
2.3 需要精准设定过期时间的应用
比如可以把上面说到的sorted set的score值设置成过期时间的时
间戳,那么就可以简单地通
过过期时间排序,定时清除过期数据了,不仅是清除Redis中的
过期数据,你完全可以把
Redis里这个过期时间当成是对数据库中数据的索引,用Redis
来找出哪些数据需要过期删
除,然后再精准地从数据库中删除相应的记录。
2.4 计数器应用
Redis的命令都是原子性的,你可以轻松地利用INCR,DECR命
令来构建计数器系统。
2.5 Uniq 操作,获取某段时间所有数据排重值
这个使用Redis的set数据结构最合适了,只需要不断地将数据往
set中扔就行了,set意为集合,所以会自动排重。
2.6 实时系统,反垃圾系统
通过上面说到的set功能,你可以知道一个终端用户是否进行了
某个操作,可以找到其操作的集合并进行分析统计对比等。没有做不到,只有想不到。
2.7 缓存
将数据直接存放到内存中,性能优于Memcached,数据结构更
多样化。
3.Redis的特点
-
高效性(内存)
Redis读取的速度是30w次/s,写的速度是10w次/s
原子性 (主逻辑线程是单线程)
Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
pipline -
支持多种数据结构
string(字符串) a->b 配置 color--> red
list(列表) a->list 消息队列 msg--->["hello","ydlclass","itlils"]
hash(哈希) a->map 购物车 1----->["1"=>"剃须刀","2"=>"电脑"]
set(集合) a->set 去重 quchong-->["北京","山西","河北"]
zset(有序集合) a->sorted set 排行榜 top10->["xx拿了金牌,10","跑路了,9.5"]
稳定性:持久化,主从复制(集群)
其他特性:支持过期时间,支持事务,消息订阅。
Redis单机环境安装
1. Windows版Redis安装
Windows版的安装比较简单,解压Redis压缩包完成即安装完
毕,安装的注意事项:
解压的目录不要有中文
目录结构层次不要太深
硬盘空间剩余空间最少要大于你的内存空间,建议20G以上
Redis 目录结构:
Redis服务启动与关闭
1、启动服务器:cmd redis-server.exe redis.windows.conf
2、默认端口号:6379
3、关闭服务器:直接关闭窗口
运行[redis-cli.exe]客户端
如何开机自启Redis
我们需要进入到你安装的Redis的目录中,通过DOS命令
redis-server --service-install redis.windows-service.conf --loglevel verbose
启动报错1067的话,在刚才redis的目录下新建文件夹Logs然
后再次启动即可。
我的电脑-管理-服务-Redis-右键启动
中文乱码
redis-cli --raw
2.Linux版Redis安装(运维)
2.1下载redis安装包
服务器执行以下命令下载redis安装包
cd /export/software
wget http://download.redis.io/releases/redis-6.2.6.tar.gz
2.2 解压redis压缩包到指定目录
执行以下命令进行解压redis
cd /export/software
tar -zxvf redis-6.2.6.tar.gz -C
2.3 安装C程序运行环境
执行以下命令安装C程序运行环境
yum -y install gcc-c++
2.4 安装较新版本的tcl
使用压缩包进行安装
执行以下命令下载tcl安装包
cd /export/software
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
解压tcl
tar -zxvf tcl8.6.1-src.tar.gz -C ../server/
进入指定目录
cd ../server/tcl8.6.1/unix/
./configure
make && make install
2.5 编译redis
cd /export/server/redis-6.2.6/
#或者使用命令 make 进行编译
make MALLOC=libc
make test && make install PREFIX=/export/server/redis-6.2.6
修改redis配置文件
cd /export/server/redis-6.2.6/
mkdir -p /export/server/redis-6.2.6/log
mkdir -p /export/server/redis-6.2.6/data
vim redis.conf
# 修改第61行
bind localhost
# 修改第128行 后台
daemonize yes
# 修改第163行
logfile "/export/server/redis-6.2.6/log/redis.log"
# 修改第247行
dir /export/server/redis-6.2.6/data
2.6 启动redis
cd /export/server/redis-6.2.6/
bin/redis-server redis.conf
2.7 关闭redis
bin/redis-cli -h localhost shutdown
2.8 连接redis客户端
cd /export/server/redis-6.2.6/
bin/redis-cli -h localhost
3.Redis Desktop Manager
一款基于Qt5的跨平台Redis桌面管理软件,支持:Windows
7+、Mac OS X 10.10+、
Ubuntu 14+,特点: C++ 编写,响应迅速,性能好。
1 下载地址:http://docs.redisdesktop.com/en/latest/install/#windows
安装客户端,连接Redis服务:
备注说明:Redis Desktoo Manager老版本免费,新版本收费
Redis的数据类型
redis当中一共支持五种数据类型,分别是:
string字符串
list列表
set集合
hash表
zset有序集合
通过这五种不同的数据类型,可以实现各种不同的功能,也可以
应用在各种不同的场景。
所有操作看官网:
或者符合过人阅读习惯:https://www.runoob.com/redis/redis-keys.html
1.对字符串string的操作
1 设置值 获取值
set ydlclass value
get ydlclass
2 mset mget 一次性操作多组数据
mset ydlclass value ydlclass1 value1 ydlclass2 value2
mget ydlclass ydlclass1 ydlclass2
3 没有这个键我们才设置
setnx dlclass value
4 将key的值 加一,减一
incr stock
decr stock
5设置 a值存活时间5秒,值是b 验证码
setex a 5 b
2.对hash列表的操作
Redis hash 是一个string类型的field和value的映射表,hash特
别适合用于存储对象。
Redis 中每个 hash 可以存储 2的32 - 1 键值对(40多亿)
下表列出了 redis hash 基本的相关命令:
1设置值 获取值
hset user username zhangsan
hset user age 18
hget user username
2批量
hmset user1 username itnanls age 19
3获取所有的键值对
hgetall user
4获取所有小key
hkeys user
5获取所有值
HVALS user
6删除
hdel user age
3.对list表的操作
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添
加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 2的32 - 1 个元素 (4294967295, 每个列
表超过40亿个元素)。
下表列出了列表相关的基本命令:
1 设置值
lpush list1 1 2 3 4 1
rpush list1 6
2查看数据
lrange list1 0 -1
3 移除数据
lpop list1
rpop list1
4.对set集合的操作
-
Redis 的 Set 是 String 类型的无序集合。集合成员是
唯一的,这就意味着集合中不能出现重复的数据 -
Redis 中集合是通过哈希表实现的,所以添加,删
除,查找的复杂度都是 O(1)。 -
集合中最大的成员数为 2的32 - 1 (4294967295, 每个
集合可存储40多亿个成员)。
1添加数据
sadd set1 1 2 3 4 5
2获取数据
smembers set1
3获取成员数量
scard set1
4业务 uv 当天登陆用户数
sadd uv:20220222 001 002 003 002
scard uv:20220222
5.对key的操作
1删除
del user1
2查看所有的key
keys * 生产环境下,别用
3存在key
exists user1
4存活时间
expire ydlclass 5
5剩余存活时间 登陆续期
pttl user1
6随机获取 key
randomkey
对ZSet的操作-重要(热搜)
-
Redis有序集合和集合一样也是string类型元素的集合,
且不允许重复的成员 -
它用来保存需要排序的数据,例如排行榜,一个班的
语文成绩,一个公司的员工工资,一个论坛的帖子
等。 -
有序集合中,每个元素都带有score(权重),以此来
对元素进行排序 -
它有三个元素:key、member和score。以语文成绩为
例,key是考试名称(期中考试、期末考试等),
member是学生名字,score是成绩。
1添加
zadd pv 100 page1.html 200 page2.html 300 page3.html
2查看
zcard pv
3查询指定权重范围的成员数
ZCOUNT pv 150 500
4增加权重
ZINCRBY pv 1 page1.html
5交集
ZADD pv_zset1 10 page1.html 20 page2.html
ZADD pv_zset2 5 page1.html 10 page2.html
ZINTERSTORE pv_zset_result 2 pv_zset1 pv_zset2
6成员的分数值
ZSCORE pv_zset page3.html
7 获取下标范围内的成员。 排序,默认权重由低到高
ZRANGE pv 0 -1
8获取由高到低的几个成员(reverse)使用最多的
效率很高,因为本身zset就是排好序的。
ZREVRANGE key start stop