Redis 学习笔记(一)-- Redis 基础知识

Redis


上篇: Linux学习


1、什么是NoSQL

​ 百度百科: https://baike.baidu.com/item/NoSQL/8828247?fr=aladdin

NoSQL(Not Only SQL),泛指非关系型的数据库。区别于关系数据库,它们不保证关系数据的ACID特性。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。

2、NoSQL的分类

2.1、键值(Key-Value)存储数据库

​ 这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果数据库管理员(DBA)只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB。

2.2、列存储数据库

​ 这部分数据库通常是**用来应对分布式存储的海量数据。**键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.

2.3、文档型数据库

​ 文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如 JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值,在处理网页等复杂数据时,文档型数据库比传统键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。

2.4、图形(Graph)数据库

​ 图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph。

不同分类特点对比

分类Examples举例典型应用场景数据模型优点缺点
键值(key-value)Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。Key 指向 Value 的键值对,通常用hash table来实现查找速度快数据无结构化,通常只被当作字符串或者二进制数据
列存储数据库Cassandra, HBase, Riak分布式的文件系统以列簇式存储,将同一列数据存在一起查找速度快,可扩展性强,更容易进行分布式扩展功能相对局限
文档型数据库CouchDB, MongoDBWeb应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)Key-Value对应的键值对,Value为结构化数据数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构查询性能不高,而且缺乏统一的查询语法。
图形(Graph)数据库Neo4J, InfoGrid, Infinite Graph社交网络,推荐系统等。专注于构建关系图谱图结构利用图结构相关算法。比如最短路径寻址,N度关系查找等很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。

3、NoSQL 特点

  • 易扩展
  • 大数据量,高性能
  • 灵活的数据模型
  • 高可用

4、什么是Redis?


中文网:https://www.redis.net.cn/


Redis (REmote DIctionary Server) ,即远程字典服务。

Redis 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis 支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。

4.1、window 上安装 redis
1、下载压缩包

​ 下载地址: https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100

2、解压缩文件

在这里插入图片描述

3、开启Redis

双击 redis-server.exe

在这里插入图片描述

4、使用Redis客户端连接Redis

双击 redis-cli.exe, 测试连接。

在这里插入图片描述

4.2、Linux 上安装Redis
1、下载安装包

官网下载: https://redis.io/

在这里插入图片描述

使用 Xftp 传到虚拟机上。

2、解压 Redis 的安装包(/opt 目录)
tar -zxvf [安装包名]

3、Redis 目录内的配置文件

在这里插入图片描述

4、基本环境安装

Redis 6 以上需要 gcc 版本在 7 以上

# 安装 gcc 依赖
yum install gcc

# -----运行下面命令升级gcc-----
# 第一步
sudo yum install centos-release-scl
# 第二步
sudo yum install devtoolset-7-gcc*
# 第三步
scl enable devtoolset-7 bash

在这里插入图片描述

# cd 切换到 redis解压目录下,执行编译命令
make
# 运行测试,确认Redis的功能是否正常
make test

报错:

在这里插入图片描述

CentOS 7 安装 tcl-8.5.13-8.el7.x86_64.rpm

# 1、下载 tcl-8.5.13-8.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/tcl-8.5.13-8.el7.x86_64.rpm
# 2、安装 tcl-8.5.13-8.el7.x86_64.rpm
rpm -ivh tcl-8.5.13-8.el7.x86_64.rpm

在这里插入图片描述

5、指定安装到某个目录
# 安装到指定的位置,PREFIX可指定安装目录,便于维护
make install PREFIX=/usr/local/redis

# cd /usr/local/redis/bin

# 查看 redis 的版本
./redis-server -v

在这里插入图片描述

6、修改 Redis 配置文件

将加压缩目录下的 redis.conf 文件复制到安装目录下新建的 config 目录下

在这里插入图片描述

修改 redis.conf 文件,把 daemonize no 改为 daemonize yes (后台启动配置, 前台启动 ./redis-server

在这里插入图片描述

8、启动 Redis 服务测试

在这里插入图片描述

9、设置开机启动
vim /etc/systemd/system/redis.service # 写入以下内容
[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/config/redis.conf	# 安装目录 和 配置文件目录
PrivateTmp=true

[Install]
WantedBy=multi-user.target

设置开机启动

[root@localhost system]# systemctl daemon-reload
[root@localhost system]# systemctl start redis.service
[root@localhost system]# systemctl enable redis.service
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /etc/systemd/system/redis.service.

客户端穿件软链接

ln -s /usr/local/redis/bin/redis-server /usr/bin/redis-server	# 服务端
ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis-cli			# 客户端

在这里插入图片描述

服务操作命令

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   	#停止开机自启动

5、Redis 性能测试

redis 性能测试的基本命令如下:

redis-benchmark [option] [option value]
序号选项描述默认值
1-h指定服务器主机名127.0.0.1
2-p指定服务器端口6379
3-s指定服务器 socket
4-c指定并发连接数50
5-n指定请求数10000
6-d以字节的形式指定 SET/GET 值的数据大小2
7-k1=keep alive 0=reconnect1
8-rSET/GET/INCR 使用随机 key, SADD 使用随机值
9-P通过管道传输 请求1
10-q强制退出 redis。仅显示 query/sec 值
11–csv以 CSV 格式输出
12-l (L 的小写字母)生成循环,永久执行测试
13-t仅运行以逗号分隔的测试命令列表。
14-I(i 的大写字母)Idle 模式。仅打开 N 个 idle 连接并等待。

在这里插入图片描述

# 主机为 127.0.0.1,端口号为 6379,执行的命令为 set,lpush,请求数为 10000,通过 -q 参数让结果只显示每秒执行的请求数
[root@localhost bin]# ./redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 10000 -q
SET: 43103.45 requests per second, p50=0.447 msec         
LPUSH: 71428.57 requests per second, p50=0.487 msec   

6、Redis 基本知识

1、redis默认有16个数据库,默认的使用的是第0个数据库

打开 redis.conf 文件

在这里插入图片描述

可以使用 SELECT <dbid> 命令在连接上指定数据库 id

[root@localhost config]# redis-cli 
127.0.0.1:6379> select 2  # 切换数据库
OK
127.0.0.1:6379[2]> DBSIZE # 查看DB大小
(integer) 0

不同的数据库可以存不同的值。测试:

127.0.0.1:6379[2]> set name miabao
OK
127.0.0.1:6379[2]> DBSIZE
(integer) 1
127.0.0.1:6379[2]> select 1
OK
127.0.0.1:6379[1]> DBSIZE
(integer) 0
127.0.0.1:6379[1]> get name
(nil)
127.0.0.1:6379[1]> select 2
OK
127.0.0.1:6379[2]> get name
"miabao"
127.0.0.1:6379[2]> 

清除当前数据库: flushdb

清除全部数据库的内容: flushall

127.0.0.1:6379[2]> keys * # 查看数据库中所有的 key
1) "name"
127.0.0.1:6379[2]> flushdb 
OK
127.0.0.1:6379[2]> keys *
(empty array)
127.0.0.1:6379[2]> 

Redis 为什么要用 6379 作为默认端口?

https://www.zhihu.com/question/20084750/answer/645322396

Redis 是单线程的!

阅读: https://baijiahao.baidu.com/s?id=1721818452566518496&wfr=spider&for=pc

Redis 为什么单线程还这么快?

1、误区一:高性能的服务器一定是多线程的?

2、误区二:多线程(CPU上下文切换)一定比单线程效率高!

核心: redis 是将所有的数据全部放在内存中的,所以说单线程去操作效率是最高的。多线程(CPU上下文切换:耗时的操作!),对于内存系统来说,如果没有上下文的切换效率就是最高的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值