Redis基本认识


是一个基于内存的键值型NoSQL数据库

特征

键值(key-value)型,value支持多种不同数据结构,功能丰富
单线程,每个命令具备原子性
低延迟,速度快(基于内存,IO多路复用,良好编码)
支持数据持久化
支持主从集群,分片集群
支持多语言客户端

安装Redis

Redis命令行客户端

Redis安装完成后九自带命令行客户端:redis-cli,使用方式如下

redis-cli [options] [commands]

常见的option有:

  • -h 127.0.0.1 指定要连接的redis节点的IP地址,默认是127.0.0.1
  • -p 6379        指定要连接redis节点的端口,默认是6379
  • -a 123          指定redis的访问密码,我设置的是123

其中commands就是Redis的操作命令
-ping 指令是对redis服务端做心跳测试,服务器正常返回pong

不指定command时,会进入redis-cli的交互控制台
在这里插入图片描述
在这里插入图片描述
没有权限,使用auth指令输入密码后就可以了
在这里插入图片描述
或者一开始就输入密码(但是不推荐,容易泄露密码)
在这里插入图片描述

Redis数据结构基本介绍

数据类型
基本类型-
Stringhello world
Hash{name:“Jack”,age:21}
List[ A -> B -> C -> D ]
Set{A,B,C}
SortedSet{A:1,B:2,C:3}
特殊类型-
GEO{A:(x,y)}
BitMap0110110101110101011
HyperLog0110110101110101011

还有很多数据类型…

Redis通用指令

通用指令是部分数据的,都可以使用命令,常见的有:

help

help [command]

查询指令用法,例如下面我要查询keys的用法
在这里插入图片描述

keys

keys是查询指令
目前创建了2条数据,姓名和年龄
在这里插入图片描述
使用keys命令查询到2条数据
在这里插入图片描述
还能用模糊查询,例如查询a开头的键值,使用通配符(*)
在这里插入图片描述
其它用法
查询中间字母有m的键值
在这里插入图片描述

查询末尾是e的键值
在这里插入图片描述

del

del是删除指定的key
在创建一个键值方便演示
在这里插入图片描述
删除一个键值
在这里插入图片描述
删除多个键值
在这里插入图片描述
细节:删除返回值
在这里插入图片描述

exists

检查键值是否存在,如果返回1以上就是存在,返回0就是不存在
在这里插入图片描述
查询单个是否存在
在这里插入图片描述

查询多个是否存在
在这里插入图片描述
如果查询不存在
在这里插入图片描述

expire

给一个key设置有效期限,有效期到期时key会被自动删除
解释为什么要弄个有效期限:
应为redis是存储在内存中的,很多数据保存在内存中,如果老是对其添加数据,而不删除数据,总有一天内存会占满

例如给age设置10秒
在这里插入图片描述

ttl

查询当前检查还剩多久存活

接着上面看时间还剩6秒
在这里插入图片描述
直到看到是-2时代表已被删除
在这里插入图片描述
细节:当查看一个键值是-1时代表永久存在,例如以下
在这里插入图片描述
建议存入数据时,设置有效期

key的层级结构

Redis没有类似MySql中的Table的概念,区分不同类型的key靠
Redis的key允许有多个单词形成层级结构,多个单词之间用";"隔开,格式如下:
项目名:业务名:类型:id
此格式并非固定但是建议这样使用
比如user相关的key:test:user:1
项目名为:test
表名为:user
编号为:1

String类型常见用法

String类型,是一个字符串类型,是Redis中最简单的存储类型
其value是字符串,不过根据字符串的格式不同,又可以分为3类:
-String:普通字符串
-int:整型类型,可以自增和自减操作
-float:浮点类型,可以自增和自减操作
不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同,字符串类型的最大空间不能超过512m

set

添加或修改已经存在的一个String类型的键值,例如
添加
在这里插入图片描述
修改
在这里插入图片描述

get

根据key获取String类型的value
在这里插入图片描述

mset

批量添加多个String类型的键值
在这里插入图片描述

mget

根据多个key获取多个String类型的value
在这里插入图片描述

incr

让一个整型的key自增1
在这里插入图片描述

incrby

让一个整型的key自增并指定步长
在这里插入图片描述
如果想让一个数减
在这里插入图片描述

increbyfloat

让一个浮点型类型的数字自增并指定步长
在这里插入图片描述
如果自增或自减就会不精确,具体原因不详

setnx

添加一个String类型的键值,前提是这个key不存在,否则不执行,不会因为set而误修改值
添加已有的键值
在这里插入图片描述
添加没有的键值
在这里插入图片描述
其它操作
修改不会成功
在这里插入图片描述
添加
在这里插入图片描述

setex

添加一个String类型的键值,并且设置有效期,此命令是一个组合命令(set)与(expire)
把之前的name1键值修改设置60秒有效期
在这里插入图片描述
其它操作
在这里插入图片描述

Hash类型常见用法

Hash类型,也称为散列。其value是一个无序字典,类似于java中的HashMap结构
String结构是将对象序列化为JSON字符串存储,当需要修改对象某个字段时很不方便,例如下面

keyvalue
test:user:1{name:“xiri”,age:21}
test:user:2{name:“xixi”,age:18}

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD
在这里插入图片描述

hset

添加或者修改hash类型key的field的值

hset [key] [field] [value]

实例:
在这里插入图片描述
在这里插入图片描述
可以设置多个字段值,比如在加个地址(address)
在这里插入图片描述
查看(此指令是查看所有是此key的,下面会介绍)
在这里插入图片描述
在这里插入图片描述

hget

获取一个hash类型key的field的值

hget [key] [field] [value]

实例:
在这里插入图片描述

hmset

批量添加多个hash类型的key的field的值
在这里插入图片描述

hmget

批量获取多个hash类型的key的field的值
在这里插入图片描述

hgetall

获取一个hash类型的key中所有的field和value
在这里插入图片描述

hkeys

获取一个hash类型的key中所有的field
在这里插入图片描述

hvals

获取一个hash类型的key中所有的value
在这里插入图片描述

hincrby

让一个hash类型的key的字段值自增并指定步长
在这里插入图片描述

hsetnx

添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
在这里插入图片描述

List类型常见用法

Redis中的list类型和java中的LinkedList类似,可以看作是一个双向链表结构。既可以支持正向检索,也可以支持反向检索

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般
    常用来存储一个有序的数据,例如:朋友圈点赞列表,评论列表等

lpush

向列表左侧插入一个或多个元素
在这里插入图片描述
此指令是从左开始查看 从多少到多少的位置(从0开始)
在这里插入图片描述

lpop

移除并返回列表左侧的第一个元素,没有则返回nil
在这里插入图片描述

rpush

向列表右侧插入一个或多个元素
在这里插入图片描述

rpop

移除并返回列表右侧的第一个元素,没有则返回nil
在这里插入图片描述

lpush和lpop与rpush和rpop总结

相同出口为栈,例子如下
从左进左出
在这里插入图片描述
从右进右出
在这里插入图片描述
不相同出口为队列,例子如下
从左进右出
在这里插入图片描述
从右进做出
在这里插入图片描述

lrange

返回一段角标范围内的所有元素
从左开始进行遍历(索引从0开始)

lrange [key] [start] [stop]

在这里插入图片描述

blpop

与lpop类似,只不过在没有元素时会等待指定时间,而不是直接返回nil
没有数据时,如下图例子
等待10秒钟
在这里插入图片描述
如果等待了10秒还没有数据就会退出
在这里插入图片描述
有数据时,如下图例子
在这里插入图片描述
无数据,数据在等待时间进入
用blpop取出 下面称为控制台1
用另一个控制台,完成等待时插入数据 下面称为控制台2
控制台1
在这里插入图片描述
控制台2
在这里插入图片描述
等待11.78秒后,控制台2发出
在这里插入图片描述
控制台1等了11.78秒后,数据到来并且从左边出了一个数据
在这里插入图片描述

brpop

与rpop类似,只不过在没有元素时会等待指定时间,而不是直接返回nil
此指令和上面blpop一样,只不过出口在右边

Set类型

Redis的Set结构与java中的HashSet类似,可以看作是一个value为null的HashMap

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能

sadd

向set中添加一个或多个元素
smembers指令是查看key的所有值,后面会说
在这里插入图片描述

srem

移除set中的指定元素
在这里插入图片描述

scard

返回set中元素的个数
在这里插入图片描述

sismember

判断一个元素是否存在于set中
在这里插入图片描述
存在返回1,不存在返回0

smembers

获取set中的所有元素
在这里插入图片描述
遍历元素

sinter

求key1和key2的交集,不止可以求2个Set的交集,演示为2个
在这里插入图片描述

sdiff

求key1和key2的差集
在这里插入图片描述

sunion

求key1和key2的并集
在这里插入图片描述

SortedSet类型

Redis的SortedSet是一个可排序的set集合,与java中的TreeSet有些类型,但底层的数据结构相差巨大,SortedSet中的每一个元素都带一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加Hash表

  • 可排序
  • 元素不重复
  • 查询速度快
    因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能

zadd

添加一个或多个元素到SortedSet中,如果已经存在则更新其score值
在这里插入图片描述

zrem

删除SortedSet中指定一个元素
删除tom
在这里插入图片描述

zscore

获取SortedSet中指定元素的score值
查看amy的score值
在这里插入图片描述

zrank

获取SortedSet中指定元素的排名
查看rose的索引位置
在这里插入图片描述
从0开始,从上往下索引,所以是2

zcard

获取SortedSet中元素个数
在这里插入图片描述

zcount

统计score值在给定范围内的所有元素个数
查询80分以下的有几个(80以下的就是0到80以内的)
在这里插入图片描述

zincrby

让Sorted set中指定元素自增,步长为指定的increment值
给amy加3分
在这里插入图片描述
给jack减2分
在这里插入图片描述

zrange

按照score排序后,获取指定排名范围内的元素
前三名有哪些
在这里插入图片描述

zrangebyscore

按照score排序后,获取指定score范围内的元素
在这里插入图片描述

求30到90的排名
在这里插入图片描述
求80到50的排名
在这里插入图片描述

zinter

求交集,以上说过,规则一样

zdiff

求差集,以上说过,规则一样

zunion

求并集,以上说过,规则一样
细节:所有排序默认是升序,如果要降序则在命令的Z后面添加rev即可

事务

介绍

Redis提供的事务是将命令打包,然后一次性、按照先进先出的顺序(FIFO)有序的执行。在执行过程中不会被打断(在事务执行过程中,其它客户端提交的命令请求不会插入到事务执行命令序列中),当事务队列中的所有命令都被执行(无论成功还是失败)完毕之后,事务就会结束。

事务相关的命令

multi

启动事务

exec

提交事务

discard

放弃事务

watch

监视一个或多个键,如果有其它客户端修改键的值,事务将失败

事务操作

举个例子:开启事务,正常执行,提交事务
在这里插入图片描述
不提交,用控制台2查看信息
在这里插入图片描述
此时发现没有提交时,数据没有发生改变
在这里插入图片描述
提交后,用控制台2查看
在这里插入图片描述

Redis持久化

Redis数据保存在内存中,为了避免关闭程序后数据丢失,就需要将数据保存在磁盘文件上

持久化策略

  • AOF:默认每秒对数据进行持久化
  • RDB:按照条件触发持久化操作,满足任意一个条件1
次数描述
9001900秒修改一次
30010900秒修改一次
601000060秒中修改10000次

配置

打开(redis.windows.conf)文件
在这里插入图片描述

RDB

红色部分就是RDB配置部分在这里插入图片描述
RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis 重启会通过加载dump.rdb文件恢复数据

AOF

appendonly yes	开启AOF
appendfsync everysec	每秒保存

在这里插入图片描述
AOF默认是关闭的,需要时开启
在这里插入图片描述
AOP默认是每秒保存

选择使用场景

允许少量数据丢失,性能要求高,选择RDB
只允许很少的数据丢失,选择AOF
几乎不允许数据丢失,选择AOF+RDB

Redis淘汰策略

Redis中的数据太多可能导致内存溢出,Redis会根据情况淘汰一些数据
Redis的内存上限:64位系统,上限就是内存上限;32位系统,最大是4G

配置最大内存

max-memory

淘汰策略

默认情况是不淘汰

maxmemory-policy

在这里插入图片描述

命令描述
noevication默认不淘汰
allkeys-lru(推荐)使用LRU算法淘汰比较少使用的键
volatile-lru在过期的键中淘汰较少使用的
allkeys-random在所有键中随机淘汰
volatile-random在过期键中随机淘汰
volatile-ttl在过期键中淘汰存活时间短的键

LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高

外网访问操作更改配置

由于 redis 采用的安全策略,默认会只准许本地访问。需要通过简单配置,完成允许外网访问
在这里插入图片描述
bind 127.0.0.1注释掉,不然只能本机访问
在这里插入图片描述
把protected-mode yes修改为protected-mode no,不然有保护,外网修改不了数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值