Redis学习笔记

简介: Redis学习笔记



1、NoSQL数据库简介

1.1、技术发展

技术的分类

1、解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN

2、解决扩展性的问题:Struts、Spring、SpringMVC、Hibernate、Mybatis

3、解决性能的问题:NoSQL、Java线程、Hadoop、Nginx、MQ、ElasticSearch 解决并发等问题

NoSQL是为了解决性能问题而产生的技术 Redis就是典型的NOSQL

1.1.1.Web1.0时代

Web1.0的时代,数据访问量很有限,用一夫当关的高性能的单点服务器可以解决大部分问题。

1.1.2.Web2.0时代

随着Web2.0的时代的到来,用户访问量大幅度提升,同时产生了大量的用户数据。加上后来的智能移动设备的普及,所有的互联网平台都面临了巨大的性能挑战。

1.1.3.解决CPU及内存压力

分布式 集群方式做架构

session共享问题 以及数据库压力问题

1.1.4.解决IO压力

总结:

1.NOSQL能解决CPU及内存压力和解决IO压力,直接通过内存进行读取
2.NOSQL能够 通过缓存使用 提高访问速度 减少IO的读操作

1.2.NoSQL数据库

NoSQL数据库概述

NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,泛指 非关系型的数据库。

NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力

  • 不遵循SQL标准。
  • 不支持ACID。(事务特性)原子性 、一致性、隔离性、持久性
  • 远超于SQL的性能。(不按照业务逻辑方式存储)

NoSQL适用场景

  • 对数据高并发的读写(秒杀功能)
  • 海量数据的读写
  • 对数据高可扩展性的

NoSQL不适用场景

  • 需要事务支持
  • 基于sql的结构化查询存储,处理复杂的关系,需要即席查询。
    即席查询(用户根据自己的需求,灵活的选择查询条件,系统能根据用户的选择生成响应的统计报表)

Memcache 支持数据单一,不支持持久化

Redis 持久化 多数据结构存储

持久化:关了电脑后数据还存在

MongoD 文档型数据库 存储数据结构更复杂

行式存储数据库(大数据时代)

行式数据库

列式数据库

Hbase

HBase是Hadoop项目中的数据库。它用于需要对大量的数据进行随机、实时的读写操作的场景中。

HBase的目标就是处理数据量非常庞大的表,可以用普通的计算机处理超过10亿行数据,还可处理有数百万元素的数据表。

图关系型数据库

主要应用:社会关系,公共交通网络,地图及网络拓谱(n*(n-1)/2)

DB-Engines 数据库排名

http://db-engines.com/en/ranking

2.Redis概述安装

2.1.应用场景

配合关系型数据库做高速缓存

  • 高频次,热门访问的数据,降低数据库IO
  • 分布式架构,做session共享

多样的数据结构存储持久化数据

2.2.Redis安装

Redis官方网站 http://redis.io

Redis中文官方网站 http://redis.cn/

安装版本

  • 6.2.1 for Linux(redis-6.2.1.tar.gz)
  • 不用考虑在windows环境下对Redis的支持

VM+Centos7+Xshell安装教程(齐全)

链接:https://pan.baidu.com/s/1nPa_b6KLWo-2_opwYOAHWQ

提取码:wuq8

CentOS官网下载页面地址:http://vault.centos.org/

CentOS7.4的安装包:

链接:https://pan.baidu.com/s/1cRgNfZ5REf4LQMIyl5K3hQ

提取码:lp6q

docker安装部署Redis

1.Docker安装

环境:CentOS 7

1.先卸载原有的docker

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2.通过仓库安装

sudo yum install -y yum-utils

3.设置阿里云镜像的仓库

sudo yum-config-manager \
    --add-repo \
  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.更新软件包索引

yum makecache fast

5.安装docker

sudo yum install docker-ce docker-ce-cli containerd.io

6启动docker

sudo systemctl start docker

7.验证(查看版本)

docker version

.查看镜像

docker images

2.Redis安装部署

``

1.搜索redis

docker search redis

2.拉取指定版本

docker pull redis:6.2.3

3.下载最新的redis

docker pull redis:latest

4.配置

mkdir -p /usr/local/redis/conf
touch /usr/local/redis/conf/redis.conf

vim /usr/local/redis/conf/redis.conf

#持久化
appendonly yes
#密码
requirepass 123456

5.启动redis

docker run -p 6379:6379 --name myredis \
-v /usr/local/redis/data:/data \
-v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis:6.2.3 redis-server /etc/redis/redis.conf
--appendonly yes \
--requirepass "root"

说明:

–name redis 【容器名】

-p 6379:6379 【映射端口】

-v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf【conf文件挂载目录】

-v /usr/local/redis/data:/data \【data挂载目录】

-d redis:6.2.3【后台运行镜像】

–restart=always 【docker重启后自动启动镜像】

redis-server /etc/redis/redis.conf 【在容器执行redis-server启动命令,执行conf文件】

–appendonly yes 【持久化】

–requirepass “root” 【设置密码】

6.查看活跃的容器

docker ps 查看已运行容器

docker ps -a 查看所有已产生的容器(包括没有启动的容器)。

docker rm 容器id删除指定id的容器

docker images查看所有镜像

docker rmi 镜像id删除指定id的镜像,注意,如果此镜像已经run产生了容器,要先删除容器,再删除镜像,否则会报错:

使用RedisDesktopManager测试连接

出现以下图片连接成功

Redis介绍相关知识

默认16个数据库,类似数组下标从0开始,初始默认使用0号库

使用命令 select 来切换数据库。如:select 1

统一密码管理,所有库同样密码。

dbsize查看当前数据库的key的数量

flushdb清空当前库

flushall通杀全部库

Memcache和redis区别

串行 vs 多线程+锁(memcached) vs 单线程+多路IO复用(Redis)

(与Memcache三点不同: 支持多数据类型,支持持久化,单线程+多路IO复用)

3.常用五大数据类型

哪里去获得redis常见数据类型操作命令http://www.redis.cn/commands.html

3.1.Redis键(key)

进入容器连接redis

docker exec -it myredis redis-cli myredis 容器名

这里进入之后 需要认证密码 auth "123456"

在使用select 1切换数据库

DBSIZE:查询当前库所有key的数量

keys *:查询当前库所有的key

exists key:查询是否存在,是返回1,否返回0

set key 设置一个key

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379>  exists k1
(integer) 1
127.0.0.1:6379> exists k2
(integer) 0

move key db:把当前库的指定key移到指定的库中

127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> MOVE k2 1
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get k2
"v2"

expire key:给指定key设置生存时间,单位为秒,生存时间结束将被系统内存回收

ttl key:查询指定key的生存时间。-1表示永不过期,-2表示已过期

127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> ttl k2
(integer) -1
127.0.0.1:6379> EXPIRE k2 10
(integer) 1
127.0.0.1:6379> ttl k2
(integer) 8
127.0.0.1:6379> ttl k2
(integer) 4
127.0.0.1:6379> ttl k2
(integer) -2
127.0.0.1:6379> get k2
(nil)

type key:查询指定key的数据结构类型

127.0.0.1:6379> lpush list 1 2 3 4
(integer) 4
127.0.0.1:6379> type k1
string
127.0.0.1:6379> type list
list

unlink key 根据value选择非阻塞删除

expire key 10 10秒钟:为给定的key设置过期时间

ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期


相关文章
|
边缘计算 Kubernetes Devops
KubeSphere平台安装系列之二【Linux单节点部署KubeSphere】(2/3)
KubeSphere平台安装系列之二【Linux单节点部署KubeSphere】(2/3)
665 3
|
2月前
|
NoSQL 前端开发 Java
响应式编程的Java实践:Reactor与WebFlux的工程落地
响应式编程是近年来Java生态中最具话题性的技术方向之一。它声称能够以更少的资源处理更高的并发,但学习曲线陡峭,调试困难,概念抽象。那么,响应式编程到底解决了什么问题?它在什么场景下真正有价值?在Java生态中如何落地?
227 3
|
缓存 JavaScript 网络架构
[Vue]学习笔记目录 【Vue2与Vue3完结】 (尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通)
[Vue]学习笔记目录 【Vue2与Vue3完结】 (尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通)
|
6月前
|
SQL 存储 关系型数据库
MySQL 高频面试题
本课程深度解析阿里MySQL高频面试题,涵盖底层原理、索引优化、性能调优与故障排查四大核心模块。结合阿里实战场景,精讲MVCC、B+树、事务ACID、死锁处理、慢SQL定位、分库分表等关键技术点,提供可落地的优化方案与标准答案,助力掌握“原理+实战”双能力,精准应对高并发、大数据量下的数据库挑战,适合中高级开发者冲击大厂offer。
|
11月前
|
NoSQL Java 数据库连接
SpringBoot框架
Spring Boot 是 Spring 家族中最流行的框架,旨在简化 Spring 应用的初始搭建与开发。它通过自动配置、起步依赖和内嵌服务器三大核心功能,大幅减少配置复杂度,提升开发效率。开发者可快速构建独立运行的 Web 应用,并支持多种数据访问技术和第三方集成。
|
边缘计算 Kubernetes Linux
KubeSphere平台安装系列之三【Linux多节点部署KubeSphere】(3/3)
KubeSphere平台安装系列之三【Linux多节点部署KubeSphere】(3/3)
516 1
|
Ubuntu 机器人 虚拟化
Ubuntu22.04配置ROS2 Humble
这篇文章是关于如何在Ubuntu 22.04系统上配置ROS2 Humble的详细教程,包括虚拟机安装、环境配置、网络设置、软件源更换、ROS1和ROS2的安装步骤。
7987 1
|
IDE 算法 开发工具
Scratch编程v3.29.1少儿编程工具
SCRATCH是一款由麻省理工学院(MIT)媒体实验室开发的图形化编程语言和集成开发环境(IDE)。它的目标是让编程变得有趣、直观且易学,尤其是针对儿童和青少年群体。通过SCRATCH,用户可以通过拖放代码块的方式来创建动画、故事、游戏等多媒体项目,无需深入了解复杂的编程语法和结构。
631 2
|
存储 算法 Java
超全面!阿里巴巴最新发布23年秋招200道Java面试题(含答案)
马上过34岁生日了,和大家聊聊最近的情况 半年前还在迷茫该学什么,怎样才能走出现在的困境,半年后已经成功上岸阿里,感谢在这期间帮助我的每一个人。 面试中总结了200道经典的Java面试题,里面包含面试要回答的知识重点,并且我根据知识类型进行了分类,可以说非常全面了~ 因为篇幅原因,大部分的内容就不给大家一一展示了,需要获取的小伙伴可以直接点击此处取到! Java平台相关 1、JDK、JRE、JVM 分别是什么关系? 2、为什么 Java 被称作是“平台无关的编程语言”? 3、Java 和 C++ 的区别? 4、什么是字节码?采用字节码的最大好处是什么? 5、Java运行的过程? 6、
705 4
|
Android开发
Android应用实现开机自启动的一种较好的方式
Android应用实现开机自启动的一种较好的方式