您现在的位置是:首页 > 正文

Redis 入门

2024-02-29 11:20:17阅读 1

Redis 入门

概述

Redis是什么?

Redis(Remote Dictionary Server ),即远程字典服务。

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

与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis能该干什么?

  1. 内存存储、持久化,内存是断电即失的,所以需要持久化(RDB、AOF)
  2. 高效率、用于高速缓冲
  3. 发布订阅系统
  4. 地图信息分析
  5. 计时器、计数器(eg:浏览量)
  6. 。。。

特性

  • 多样的数据类型

  • 持久化

  • 集群

  • 事务


环境搭建

官网:https://redis.io/

推荐使用Linux服务器学习。

windows版本的Redis已经停更很久了…

Windows安装

https://github.com/dmajkic/redis

  1. 解压安装包
    image

  2. 开启redis-server.exe

  3. 启动redis-cli.exe测试

image

Linux安装

  1. 下载安装包!redis-5.0.8.tar.gz

  2. 解压Redis的安装包!程序一般放在 /opt 目录下

image

  1. 基本环境安装
yum install gcc-c++
# 然后进入redis目录下执行
# 如果安装redies6.X 版本 , 出现error错误 , 重新回退到5.X版本 ,
## 或者安装一个依赖  yum install tcl  出错是因为6.X的redis需要5.3以上的版本的gcc 
make
# 然后执行
make install

image

  1. redis默认安装路径 /usr/local/bin
    image

  2. 将redis的配置文件复制到 程序安装目录 /usr/local/bin/kconfig下

image

  1. redis默认不是后台启动的,需要修改配置文件!

image

  1. 通过制定的配置文件启动redis服务

image

  1. 使用redis-cli连接指定的端口号测试,Redis的默认端口6379

image

  1. 查看redis进程是否开启

image
10. 关闭Redis服务 shutdown

image

  1. 再次查看进程是否存在

  2. 后面我们会使用单机多Redis启动集群测试

测试性能

redis-benchmark Redis官方提供的性能测试工具,参数选项如下:

image

简单测试:

# 测试:100个并发连接 100000请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000

image

基础知识

redis默认有16个数据库

image

默认使用的第0个;

16个数据库为:DB 0~DB 15
默认使用DB 0 ,可以使用select n切换到DB n,dbsize可以查看当前数据库的大小,与key数量相关。

127.0.0.1:6379> config get databases # 命令行查看数据库数量databases
1) "databases"
2) "16"

127.0.0.1:6379> select 8 # 切换数据库 DB 8
OK
127.0.0.1:6379[8]> dbsize # 查看数据库大小
(integer) 0

# 不同数据库之间 数据是不能互通的,并且dbsize 是根据库中key的个数。
127.0.0.1:6379> set name sakura 
OK
127.0.0.1:6379> SELECT 8
OK
127.0.0.1:6379[8]> get name # db8中并不能获取db0中的键值对。
(nil)
127.0.0.1:6379[8]> DBSIZE
(integer) 0
127.0.0.1:6379[8]> SELECT 0
OK
127.0.0.1:6379> keys *
1) "counter:__rand_int__"
2) "mylist"
3) "name"
4) "key:__rand_int__"
5) "myset:__rand_int__"
127.0.0.1:6379> DBSIZE # size和key个数相关
(integer) 5

keys * :查看当前数据库中所有的key。

flushdb:清空当前数据库中的键值对。

flushall:清空所有数据库的键值对。

Redis是单线程的,Redis是基于内存操作的。

所以Redis的性能瓶颈不是CPU,而是机器内存和网络带宽。

那么为什么Redis的速度如此快呢,性能这么高呢?QPS达到10W+

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

  • 误区1:高性能的服务器一定是多线程的?
  • 误区2:多线程(CPU上下文会切换!)一定比单线程效率高!

核心:Redis是将所有的数据放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作!),对于内存系统来说,如果没有上下文切换效率就是最高的,多次读写都是在一个CPU上的,在内存存储数据情况下,单线程就是最佳的方案。

网站文章

  • 获取输入日期的下一天(Java)

    获取输入日期的下一天(Java)

    输出用户输入日期的下一天,年份范围在1920-2050之间

    2024-02-29 11:20:08
  • 软考之软件工程基础理论知识

    软考之软件工程基础理论知识

    某公司为其研发的硬件产品设计实现了一种特定的编程语言,为了方便开发者进行软件开发,公司拟开发一套针对该编程语言的集成开发环境,包括代码编辑、语法高亮、代码编译、运行调试等功能。该软件系统特别强调用户定...

    2024-02-29 11:19:53
  • 模拟setinterval

    使用setTimeout模拟setInterval

    2024-02-29 11:19:23
  • Spring高级四十九讲笔记

    Spring高级四十九讲笔记

    容器与 bean 1) 容器接口 BeanFactory 接口,典型功能有: getBean ApplicationContext 接口,是 BeanFactory 的子接口。它扩展了 BeanFac...

    2024-02-29 11:19:18
  • 为什么要学设计模式?

    为什么要学设计模式?

    01什么是设计模式设计模式( Design Pattern )代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一...

    2024-02-29 11:19:11
  • antd vue3 图片上传组件扩展,支持多图上传 图片拖拽排序等

    antd vue3 a-upload组件多图上传,图片拖拽排序 multiple=true

    2024-02-29 11:18:41
  • 2020年,Android开发想自学可能吗,大概要多久?

    2020年,Android开发想自学可能吗,大概要多久?

    看见有人提问“Android开发想自学可能吗,大概要多久?”,想着自己好歹也是工作了快六年的老Android,就在这里特意写了一篇文章回答一下,希望对大家的自学之路有所帮助。一、能不能自学Androi...

    2024-02-29 11:18:34
  • 刷新页面后,让控制台的js代码继续执行

    在各种限时,秒杀活动中,有个自动循环的点击的工具是很重要的。 为了方便起见,我们把Js代码放在浏览器的控制台执行,但是刷新页面后,js代码就清空了,也就无法执行。 可以用js代码实现一个不受页面刷新影响不断执行的代码,如下: 1. 必要的知识 prompt() 弹出对话框,获取用户输入的文本setTimeout(,) 延迟执行函数write() 可向指定对象写入html...

    2024-02-29 11:18:27
  • 【Qt官方例程学习笔记】Analog Clock Window Example (画笔的平移/旋转/缩放应用)...

    这个例子演示了如何使用QPainter的转换和缩放特性来简化绘图。值得学习的:定时器事件ID检查:在定时器事件中检查定时器id是比较好的实践。QPainter抗锯齿:We call QPainter::setRenderHint() with QPainter::Antialiasing to turn on antialiasing. This makes drawing o...

    2024-02-29 11:18:20
  • oracle 查找特定字符,Oracle截取字符串和查找字符串,联合使用截取特定字符

    oracle 截取字符(substr),检索字符位置(instr) case when then else end语句使用 收藏常用函数:substr和instr1.SUBSTR(string,start_position,[length]) 求子字符串,返回字符串解释:string 元字符串start_position 开始位置(从0开始)length 可选项,子字符串的个数For e...

    2024-02-29 11:17:50