Redis学习笔记

本文详细介绍了NoSQL数据库的优缺点,重点解析了Redis的安装、使用及命令操作,包括Windows和Linux环境下的安装、客户端连接、基本操作和数据类型。此外,还探讨了Redis的高级特性如事务、持久化和主从复制,以及Jedis在Java应用中的使用。
摘要由CSDN通过智能技术生成

目录

         一、NoSQL

关系型数据库的缺点

NoSQL的优势

NoSQL的劣势

二、Redis安装和使用

1、Window上安装Redis 

2、在Linux上安装Redis

3、Redis客户端

4、Redis基本操作命令

5、Redis的key的操作命令

三、Redis数据类型操作命令

1、字符串类型

2、哈希类型hash

3、列表list

4、集合set

5、有序集合类型zset

四、高级话题

1、Redis事务

2、持久化

3、主从复制

五、Jedis操作Redis



一、NoSQL

可以解释为非关系型数据库。在NoSQL数据库中数据之间是无联系的,无关系的。数据结构是松散的,可变的。

关系型数据库的缺点

无法应对每次上万次的读写请求,无法处理大量集中的高并发数据。

无法简单通过增加硬件、服务节点来提高系统性能。数据整个存储在一个数据库中。

关系型数据库大多是收费的,对硬件的要求较高。

NoSQL的优势

大数据量,高性能。NoSQL数据库具有非常高的读写性能,在大数据量下同样可以。这是由于他的无关系性数据库的结构简单。关系型数据库采用的是查询缓存。

灵活的数据模型。NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。

高可用。

低成本。

NoSQL的劣势

不支持标准的 SQL,没有公认的 NoSQL 标准

没有关系型数据库的约束,大多数也没有索引的概念

没有事务,不能依靠事务实现 ACID。

没有丰富的数据类型(数值,日期,字符,二进制,大文本等)

二、Redis安装和使用

Redis是当今非常流行的基于KV结构的作为Cache使用的NoSQL数据库

Redi是一个开源的使用c语言编写、支持网络、可基于内存也可持久化的Key-Value数据库。Key字符类型,其值可以是字符串、哈希(Map)、列表(List)、集合(set)和有序集合(sets)等数据类型。

官网: https://redis.io/
中文: http://www.redis.cn/

1、Window上安装Redis 

windows 版本: https://github.com/MSOpenTech/redis/releases

在下载的Redis-x64-3.2.100.zip解压后,放在某个目录下

双击redis-server.exe启动Redis

有的机器双击 redis-server.exe 执行失败,找不到配置文件,可以采用以下执行方式: 在命令行
(cmd) 中按如下方式执行: D:\tools\Redis-x64-3.2.100>redis-server.exe redis.windows.conf
按ctrl+c 退出Redis服务程序

2、在Linux上安装Redis

启动Redis

启动方式:①前台启动 ./redis-server redis.conf 配置文件路径 ②后台启动 ./redis-server redis.conf 配置文件路径 &

在其他窗口查看redis 启动进程 #ps -ef | grep redis

关闭Redis

使用redis客户端关闭,向服务器发现关闭命令

切换到redis-4.0.13/src/目录,执行。/redis-cli shutdown

kill pid 或者 kill-9 pid这个命令不会考虑是否有数据正在操作

3、Redis客户端

redis客户端是一个程序,通过网络连接到redis服务器,再客户端软件中使用Redis可以识别别的命令,向Redis服务器发送命令,告诉Redis想要做什么。

Redis命令行客户端

两种常见的连接方式:

直接连接redis:./redis-cli

在redis安装目录下/src执行 ./redis-cli。此命令市本级127.0.0.1,端口6278的redis

指定ip和端口连接redis:./redis-cli-h127.0.0.1-p 6379

-h redis主机ip(可以指定任意的redis服务器)

-p端口号(不同的端口表示不同的redis应用)

Redis远程客户端:

Redis Desktop Manager C++ 编写,响应迅速,性能好。
官网地址:https://redisdesktop.com/
安装客户端软件

 使用客户端连接llinux的redis

使用客户端连接Linux的Redis

连接linux的Redis之前需要修改redis服务器的配置信息,远程连接redis需要修改redis主目录下的redis.conf配置文件:

①、bind ip 绑定ip此行注释

②、 protected-mode yes 保护模式改为 no
使用 vim 命令修改 redis.conf 文件,修改文件前备份此文件,执行 cp 命令
执行vim redis.conf
使用redis.conf 启动Redis
注意修改配置文件后,需要使用配置文件重新启动Redis   ./redis-server ../redis.conf &
关闭LInux系统的防火墙:systemctl stop firewalld

4、Redis基本操作命令

沟通命令:Redis>ping 返回pong 表示redis服务运行正常

查看当前数据库中key的数目:dbsize 

redis默认使用16个库:在redis.conf文件中databases 16

切换库命令:select db

删除当前库的数据库:flushdb

redis自带的客户端退出当前redis 连接:exit或者quit

5、Redis的key的操作命令

keys 语法:可以是pattern

查找所有符合模式pattern的key。pattern可以使用通配符

*:表示0-多个字符 例如keys* 查询所有的key

?:表示单个字符 例如wo?d 匹配word

exists 语法 exists key [key……]

判断key是否存在:  整数,存在 key 返回 1,其他返回 0.使用多个 key,返回存在的 key 的数量

expire语法:expire key seconds

设置 key 的生存时间,超过时间, key 自动删除。设置成功返回数字 1 ,其他情况是 0
ttl 语法:ttl key
以秒为单位,返回 key 的剩余生存时间( ttl: time to live

type  查看key所有储值的数据类型

返回值:字符串表示的数据类型 none (key 不存在 )  string (字符串 )  list (列表 )  set (集合 ) zset (有序集 )  hash (哈希表 )
del   删除存在的 key ,不存在的 key 忽略

三、Redis数据类型操作命令

1、字符串类型

基本命令

set:将字符串值 value 设置到 key 中 。 语法:set key value,向已经存在的 key 设置新的 value,会覆盖原来的值

get:获取key中设置的字符串值。语法:get key

incr:key 中储存的数字值加 1,如果 key 不存在,则 key 的值先被初始化为 0 再执行 incr 操作(只能对数字类型的数据操作)

decr:key 中储存的数字值减1

append:语法:append key value。如果 key 存在,则将 value 追加到 key 原来旧值的末尾 。如果 key 不存在,则将 key 设置值为 value

常用命令

strlen:strlen key 返回 key 所储存的字符串值的长度

getrange:getrange key start end。获取 key 中字符串值从 start 开始到 end 结束的子字符串,包括 start end, 负数表示从字符串的末尾开始,-1 表示最后一个字符

setrange:语法:setrange key offset value 。说明:用 value 覆盖(替换)key 的存储的值offset 开始,不存在的 key 做空白字符串。 返回值:修改后的字符串的长度

mset:语法:mset key value [key value…]  说明:同时设置一个或多个 key-value

mget:语法:mget key [key …]  作用:获取所有(一个或多个)给定 key 的值

2、哈希类型hash

基本命令

hset:语法:hset hash 表的 key field value 。作用:将哈希表 key 中的域 field 的值设为 value,如果 key 不存在,则新建 hash 表,执行赋值,如果有 field ,则覆盖值。

hget:语法:hget key field 。作用:获取哈希表 key 中给定域 field 的值 。返回值:field 域的值,如果 key 不存在或者 field 不存在返回 nil

hmset:语法:hmset key field value [field value…] 。说明:同时将多个 field-value (-)设置到哈希表 key 中,此命令会覆盖已经存在的 field,hash 表 key 不存在,创建空的 hash 表,执行 hmset.

hmget:语法:hmget key field [field…] 。作用:获取哈希表 key 中一个或多个给定域的值

hgetall:语法:hgetall key 。作用:获取哈希表 key 中所有的域和值

hdel:语法:hdel key field [field…] 。作用:删除哈希表 key 中的一个或多个指定域 field,不存在 field 直接忽略

常用命令

hkeys:语法:hkeys key 。作用:查看哈希表 key 中的所有 field

hvals:语法:hvals key 。作用:返回哈希表 中所有域的值

hexists:语法:hexists key field 。作用:查看哈希表 key 中,给定域 field 是否存在

3、列表list

基本命令

lpush:语法:lpush key value [value…] 。作用:将一个或多个值 value 插入到列表 key 的表头(最左边),从左边开始加入值,从左到右的顺序依次插入到表头

rpush:语法:rpush key value [value…] 。作用:将一个或多个值 value 插入到列表 key 的表尾(最右边),各个 value 值按从左到右的顺序依次插入到表尾

lrange:语法:lrange key start stop 。作用:获取列表 key 中指定区间内的元素,0 表示列表的第一个元素,以 1 表示列表的第二个元素;start , stop 是列表的下标值,也可以负数的下标, -1 表示列表的最后一 个元素, -2 表示列表的倒数第二个元素,以此类推

lindex:语法:lindex key index。作用:获取列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询。

llen:语法:llen key 。作用:获取列表 key 的长度

常用命令

lrem:语法:lrem key count value 。作用:根据参数 count 的值,移除列表中与参数 value 相等的元素,count >0 ,从列表的 左侧向右开始移除;count < 0 从列表的尾部开始移除;count = 0 移除表中所有与 value 相等的值。

lset:语法:lset key index value 。作用:将列表 key 下标为 index 的元素的值设置为 value

linsert:语法:linsert key BEFORE|AFTER pivot value 。作用:将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置。key 不存在,pivot不在列表中,不执行任何操作。

4、集合set

基本命令

sadd:语法:sadd key member [member…] 。作用:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,不会再加入。

semembers:语法:smembers key 。作用:获取集合 key 中的所有成员元素,不存在的 key 视为空集合

sismember:语法:sismember key member 。作用:判断 member 元素是否是集合 key 的成员

scard:语法:scard key 。作用:获取集合里面的元素个数

srem:语法:srem key member [member…] 。作用:删除集合 key 中的一个或多个 member 元素,不存在的元素被忽略。

常用命令

srandmember:语法:srandmember key [count]。 作用:只提供 key,随机返回集合中一个元素,元素不删除,依然在集合中;提供了 count 时,count 正数, 返回包含 count 个数元素的集合,集合元素各不相同。count 是负数, 返回一个 count 绝对值的长度的集合,集合中元素可能会重复多次。

spop:语法:spop key [count] 。作用:随机从集合中删除一个元素, count 是删除的元素个数。

5、有序集合类型zset

有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员

基本命令

zadd:语法:zadd key score member [score member…] 。作用:将一个或多个 member 元素及其 score 值加入到有序集合 key 中,如果 member 存在集合中,则更新值;score 可以是整数或浮点数

zrange:语法:zrange key start stop [WITHSCORES] 。作用:查询有序集合,指定区间的内的元素。集合成员按 score 值从小到大来排序。start, stop 都是从 0 开始。0 是第一个元素,1 是第二个元素,依次类推。以 -1 表示最后一个成员,-2 表示倒数第二个成员。WITHSCORES 选项让 score value 一同返回。

zrevrange:语法:zrevrange key start stop [WITHSCORES] 。作用:返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递减(从大到小)来排列。其它同 zrange 命令。

zrem:语法:zrem key member [member…] 。作用:删除有序集合 key 中的一个或多个成员,不存在的成员被忽略

zcard:语法:zcard key 。作用:获取有序集 key 的元素成员的个数

常用命令

zrangebyscore:语法:zrangebyscore key min max [WITHSCORES ] [LIMIT offset count] 。作用:获取有序集 key 中,所有 score 值介于 min max 之间(包括 min max)的成 员,有序成员是按递增(从小到大)排序

zrevrangebyscore:语法:zrevrangebyscore key max min [WITHSCORES ] [LIMIT offset count] 作用:返回有序集 key 中, score 值介于 max min 之间(默认包括等于 max min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。其他同 zrangebyscore

zcount:语法:zcount key min max 。作用:返回有序集 key 中,score 值在 min max 之间(默认包括 score 值等于 min max )的成员的数量

四、高级话题

1、Redis事务

Redis 中的事务( transaction )是一组命令的集合,至少是两个或两个以上的命令, redis
事务保证这些命令被执行时中间不会被任何其他操作打断。
事务的操作命令
multi  标记一个事务的开始。事务内的多条命令会按照先后顺序被放进一个队列当中
exec  执行所有事务块内的命令
discard  取消事务,放弃执行事务块内的所有命令
watch   监视一个 ( 或多个 ) key ,如果在事务执行之前这个 ( 或这些 ) key 被其他命令所改动, 那么事务将被打断。
unwatch 取消 WATCH 命令对所有 key 的监视。如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH
WATCH 机制:使用 WATCH 监视一个或多个 key , 跟踪 key 的 value 修改情况,如果有 key 的 value 值在事务 EXEC 执行之前被修改了,整个事务被取消
事务的实现
1 multi :用 multi 命令告诉 Redis ,接下来要执行的命令你先不要执行,而是把它们暂时存起(开启事务)
2 saddworks john 第一条命令进入等待队列(命令入队)
3 sadd works rose 第二条命令进入等待队列(命令入队)
4 exce 告知 redis 执行前面发送的两条命令(提交事务)
事务执行 exec 之前,入队命令错误,事务终止,取消,不执行。
exec 执行后的所产生的错误,即使事务中有某个/某些命令在执行时产生了错误, 事务中的其他命令仍然会继续执行
DISCARD 放弃事务,则命令队列不会被执行

2、持久化

持久化可以理解为存储,就是将数据存储到一个不会丢失的地方,如果把数据放在内存中,电脑关
闭或重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在磁盘就算是一种持久化。
RED方式:就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存。存储在一个二进制文件中。
RDB 方式的数据持久化,仅需在 redis.conf 文件中配置即可,默认配置是启用的。
在配置文件 redis.conf 中搜索 SNAPSHOTTING ,查找在注释开始和结束之间的关于 RDB 的配置说明。配 SNAPSHOTTING 置地方有三处。
①:配置执行 RDB 生成快照文件的时间策略。配置格式: save <seconds> <changes>
②: dbfilename :设置 RDB 的文件名,默认文件名为 dump.rdb
③: dir :指定 RDB 文件的存储位置,默认是 ./ 当前目录
配置步骤
①:查看 ps -ef | grep redis ,如果 redis 服务启动,先停止
②:修改 redis.conf 文件,修改前先备份,执行 cp redis.conf bak_redis.conf
查看默认启用的 RDB 文件

③:编辑 redis.conf 增加 save 配置,修改文件名等。vim redis.conf

总结:

优点:由于存储的是数据快照文件,恢复数据很方便,也比较快

缺点:会丢失最后一次快照以后更改的数据。由于需要经常操作磁盘,RDB会分出一个子进程。如果数据库很大的话,子进程占用比较多的时间。

AOF方式:Redis 每次接收到一条改变数据的命令时,它将把该命令写到 一个 AOF 文件中(只记录写操作,读操作不记录),当 Redis 重启时,它通过执行 AOF 文件 中所有的命令来恢复数据。

AOF 方式的数据持久化,仅需在 redis.conf 文件中配置即可配置项
①: appendonly :默认是 no ,改成 yes 即开启了 aof 持久化
②: appendfilename :指定 AOF 文件名,默认文件名为 appendonly.aof
③: dir : 指定 RDB AOF 文件存放的目录,默认是 ./
④: appendfsync :配置向 aof 文件写命令数据的策略:
no :不主动进行同步操作,而是完全交由操作系统来做(即每 30 秒一次),比较快但不
是很安全。
always :每次执行写入都会执行同步,慢一些但是比较安全。
everysec :每秒执行一次同步操作,比较平衡,介于速度和安全之间。这是默认项
⑤: auto-aof-rewrite-min-size :允许重写的最小 AOF 文件大小,默认是 64M
总结:append-only 文件是另一个可以提供完全数据保障的方案;AOF 文件会在操作过程中变得越来越大。

3、主从复制

读写分离

为了避免单点故障,我们需要将数据复制多份部署在多台不同的服务器上,即使有一台服务器出现
故障其他服务器依然可以继续提供服务。这就要求当一台服务器上的数据更新后,自动将更新的数
据同步到其他服务器上。
可以通过部署多台 redis ,并在配置文件中指定这几台 redis 之间的主从关系,主负责写入数据,
同时把写入的数据实时同步到从机器,这种模式叫做主从复制,master/slave ,并且 redis 默认
master 用于写, slave 用于读,向 slave 写数据会导致错误
主从复制实现步骤
如果 Redis 启动,先停止。
作为 Master Redis 端口是 6380
作为 Slaver Redis 端口分别是 6382 , 6384
从原有的 redis.conf 拷贝三份,分别命名为 redis6380.conf, redis6382.conf , redis6384.conf
Master配置文件
配置项说明:
include :包含原来的配置文件内容。 /usr/local/redis-4.0.13/redis.conf 按照自己的目录设置。
daemonize yes 后台启动应用,相当于 ./redis-server & 的作用。
port : 自定义的端口号
pidfile : 自定义的文件,表示当前程序的 pid , 进程 id
logfile :日志文件名
dbfilename :持久化的 rdb 文件名
Slave配置文件
编辑 Slave 的配置文件 redis6382.conf redis6384.conf: 在空文件加入如下内容
①: redis6382.conf
include /usr/local/redis-4.0.13/redis.conf
daemonize yes
port 6382
pidfile /var/run/redis_6382.pid
logfile 6382.log
dbfilename dump6382.rdb
slaveof 127.0.0.1 6380
slaveof :表示当前 Redis 是谁的从。当前是 127.0.0.0 端口 6380 这个 Master 的从
启动服务器Master/Slave
启动方式 ./redis-server 配置文件
启动 Redis, 并查看启动进程
查看配置后的服务信息
命令:
①: Redis 客户端使用指定端口连接 Redis 服务器
./redis-cli -p 端口
②:查看服务器信息
info replication
向Master写入数据
在Slave读入数据

高可用Sentinel哨兵

可以用它来监控多个 Redis 服务实例的运 行情况。Redis Sentinel 是一个运行在特殊模式下的 Redis 服务器。
Sentinel 系统有三个主要任务:
  监控: Sentinel 不断的检查主服务和从服务器是否按照预期正常工作。
  提醒:被监控的 Redis 出现问题时, Sentinel 会通知管理员或其他应用程序。
 自动故障转移:监控的主 Redis 不能正常工作, Sentinel 会开始进行故障迁移操作。

五、Jedis操作Redis

使用 Redis 官方推荐的 Jedis ,在 java 应用中操作 Redis Jedis 几乎涵盖了 Redis 的所有
命令。
下载: http://search.maven.org/ ,搜索 jedis
Jedis Redis java 客户端。 Maven 依赖

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.3</version>
</dependency>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尚硅谷是一个教育机构,他们提供了一份关于Redis学习笔记。根据提供的引用内容,我们可以了解到他们提到了一些关于Redis配置和使用的内容。 首先,在引用中提到了通过执行命令"vi /redis-6.2.6/redis.conf"来编辑Redis配置文件。这个命令可以让你进入只读模式来查询"daemonize"配置项的位置。 在引用中提到了Redis会根据键值计算出应该送往的插槽,并且如果不是该客户端对应服务器的插槽,Redis会报错并告知应该前往的Redis实例的地址和端口。 在引用中提到了通过修改Redis的配置文件来指定Redis的日志文件位置。可以使用命令"sudo vim /etc/redis.conf"来编辑Redis的配置文件,并且在文件中指定日志文件的位置。 通过这些引用内容,我们可以得出结论,尚硅谷的Redis学习笔记涵盖了关于Redis的配置和使用的内容,并提供了一些相关的命令和操作示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis学习笔记--尚硅谷](https://blog.csdn.net/HHCS231/article/details/123637379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis学习笔记——尚硅谷](https://blog.csdn.net/qq_48092631/article/details/129662119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值