Redis(非关系型数据库)

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集合的操作
  1. Redis 的 Set 是 String 类型的无序集合。集合成员是
    唯一的,这就意味着集合中不能出现重复的数据

  2. Redis 中集合是通过哈希表实现的,所以添加,删
    除,查找的复杂度都是 O(1)。

  3. 集合中最大的成员数为 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的操作-重要(热搜)
  1. Redis有序集合和集合一样也是string类型元素的集合,
    且不允许重复的成员

  2. 它用来保存需要排序的数据,例如排行榜,一个班的
    语文成绩,一个公司的员工工资,一个论坛的帖子
    等。

  3. 有序集合中,每个元素都带有score(权重),以此来
    对元素进行排序

  4. 它有三个元素: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

相关推荐
山人在山上3 分钟前
arcgis server ip修改后服务异常解决方案
数据库·tcp/ip·arcgis
不剪发的Tony老师25 分钟前
SQL实现新年倒计时功能
数据库·sql
小小药32 分钟前
009-spring-bean的实例化流程
java·数据库·spring
DashVector1 小时前
如何通过HTTP API插入或更新Doc
大数据·数据库·数据仓库·人工智能·http·数据库架构·向量检索
hac13221 小时前
瀚高数据库
数据库
小小小妮子~1 小时前
深入理解 MySQL 架构
数据库·mysql·架构
man20172 小时前
【2024最新】基于Python+Mysql+django的水果销售系统Lw+PPT
数据库·mysql·django
度假的小鱼2 小时前
01 Oracle 基本操作
数据库·oracle
张声录12 小时前
【ETCD】【实操篇(十)】基于 ETCD 实现一个简单的服务注册及发现功能
数据库·etcd
张声录12 小时前
【ETCD】【实操篇(十八)】ETCD监控实战:提升系统健康与集群调试效率
数据库·chrome·etcd