redis

内容:
Redis篇

介绍:
redis是一个非关系型的数据库

为什么需要学习Redis这个非关系型数据库:
主要是用于处理一下问题:
1.对数据库高并发读写的需求
2.对海量数据的高效率存储和访问的需求
3.对数据库的高可扩展和高可用性的需求求

主要产品类型:
mongoDB、Redis(键值对的形式进行存储数据的)

非关系型数据库特点:
1.没有表格限制,随时可以自定义数据表格
2.非关系型数据库存储在内存中,而我们的关系型数据库存储在硬盘中,所以菲关系型数据库存储,以及查询效率更高
3.数据之间没有任何关联,所以在架构方面可以有很大的扩展性
4.非关系型数据库可以搭建高可用架构

掌握要点:
1.redis支持五种数据类型:
1️⃣String
2️⃣hash(哈希)
3️⃣字符串列表list
4️⃣字符串集合set
5️⃣有序的字符串集合(zset或者sorted-set)

2.key值命名的规范:
项目名:模块:key ----> product:name 类似于这种模式,这样子便于管理

在这里插入图片描述

命令行:

对于类型为String类型的数据操作命令:
(重点)set key value:
把key和value设置到redis缓存中

(重点)get key:
通过过get key的方法可以获取value的值

getset key value:
获取之前key中value数据,所以存在返回值,同时可以修改原来的value的值。

(重点)setex key seconds value:
设置一个key,以及一个value的值,同时设置其存在时间。定时消失

setnx key value
这句命令是先判断是否存在该key,若是存在该key值,则不创建新的键值对,而是返回0。

incr key/decr key
实现一个加1的自增过程/实现一个减1的自减过程

incrby key increment/decrby key increment
将key值实现一个定量增长/将key值实现一个定量减少

对于类型为hash类型的数据操作命令:

hset key filed value :
将哈希表key中字段filed的值设为value

在这里插入图片描述
在这里插入图片描述
在redis中的显示。
这样子做的一个好处在于,可以改变value的值,也可以改变field的值。

hset key field1 value1【field2 value2】:
可以同时存储多个字段
在这里插入图片描述
hget key field
可以获取对应key中的字段field中的值

(重点)hmget key field1 field2…
可以同时获取多个对应的值

hdel key field1 field2
可以删除该key中的字段,可以一次性删除多了字段

hlen key
可以获取该key值中有多少个字段

hdel key
删除该key以及key中所有字段

(重点)hgetall key
可以获取该key中所有字段的以及它的值

对于类型为List类型的数据操作命令:

lpush keys x1 x2 x3:
从左边输入数据

rpush keys x1 x2 x3:
从右边输入数据

lpop keys:
从左边弹出数据,之后keys中就没有该值

rpop keys:
从右边弹出数据,之后keys中就没有该值

llen keys:
返回key值中的所有元素

lindex keys index
可以获取索引元素

对于类型为set类型的数据操作命令:

由于该set类型是无序且唯一,所以可以用于投票

sadd key menber1 【menber2】
只能添加唯一且无序的

smembers keys
获取该key值对应的所有元素

sdiff key1 key2
指的是获取key1中有而key2中没有的元素

sunion key1 key2
指的是获取两个key中的所有元素,但是存在一个唯一性

sinter key1 key2
指的是两个key中都存在的元素

对于类型为sorted-set类型的数据操作命令:

优势:和string集合一样是有序的,同时它也是唯一的。
为什么它可以进行排序呢?
它通过给每一个元素都关联一个double类型的分数。redis是通过分数来给集合中的元素进行排序。

zadd key score value
给添加的key赋予一个分数,和value进行排序

zscore key member
查询对应分数的value的值

zrange key start stop[withscore]
获取一个范围中的值,其中需要注意start 和 stop 指的是索引位置/添加括号中的单词,代表连分数一起查询出来

zrevrange key start stop
指的是从大到小进行排列。

工作原理:

实操项目:

补充知识点:
arrarylist:是使用数组的方式进行数据的存储,所以查询的速度会快,原因是可以通过下标进行查询数据,相对来说增删比较慢
linkedlist:是使用双向链表的方法进行数据的存储,所以增删的速度会快,而查询速度会比较慢,原因是需要遍历所有的元素。

怎么断定一个对象是垃圾:
1.引用计数法:没有任何引用指向它,它就是垃圾
2.根可达算法:从根目录开始查询,并未找到该变量或者值的情况下,该变量或者该值为垃圾。

redis的持久化【面试题】
redis的高性能体现在把数据存储到内存中,当我们使用重新开启电脑的时候,或者遇到一些不可抗力因素重启电脑,会导致我们的数据丢失。所以需要把redis内存中的数据同步到我们的硬盘中。这个过程就叫做redis的持久化。

redis存在两种方式的持久化:
1.RDB方式:
首先它是一种redis的默认方式,其次它会每隔一段时间通过快照的方法,把数据备份到硬盘中。一般存入的硬盘中的文件为dump.db
优点:
1️⃣持久化文件体积小
缺点:
1️⃣可能会产生数据的丢失,由于是每隔一段时间才会进行数据的备份操作。
2️⃣不利于数据库的重构,它只会存储最后的结果,不会存储过程中的变更值

数据通过RDB实现持久化需要达到两个因素:
1️⃣读写的数据量
2️⃣规定时间达到
如果达到以下三个条件即可进行备份操作:
after 900 sec (15 min) if at least 1 key changed
after 300 sec (5 min) if at least 10 keys changed
after 60 sec if at least 10000 keys changed

2.AOF方式(APPEND ONLY MODE):
它会记录每一次操作。
优点:
1️⃣数据很难丢失
2️⃣可以记录下整个数据库一个变化过程,便于数据库的重构
缺点:
1️⃣持久化文件体积大,同时硬盘中的存储数据也会越来越来。

如何使用aof:
在配置文件redis.window.conf中APPEND ONLY MODE修改appendonly为yes。
在这里插入图片描述
每秒钟备份一次。
在这里插入图片描述
当appendfsync为no的时候,只能充当缓存

下次开启的时候,需要使用管理员权限中输入路径+ ./redis-server redis.windows.conf才行打开之前备份的信息。

Jedis

Jedis存在的意义在于用java代码命令来操作Redis。
方法一:通过Jedis.jar包实现(jedis-2.7.0.jar)
在这里插入图片描述
其中localhost 和6379 在redis的可视化端口建立。以此类推即可。
其中每次都要创建一次连接,并且每次都需要关闭。

方法二:通过Jedispool连接池实现(commons-pool2-2.3.jar)

在这里插入图片描述

方法三:通过配置文件实现:
在这里插入图片描述
在这里插入图片描述

易错点:
1.什么是聚簇索引?非聚簇索引
聚簇索引:索引和数据在同一个文件中,一般称为innoDB
非聚簇索引:索引和数据不在同一个文件中,一般称为MyISAM

2.如果要获取多个字段的值的时候,需要主要hmget key field1 field2…
此处记得不是hget,容易犯错的地方。

3.java中的list可以直接存储到redis中吗?
不可以,java中list需要转化成json类型才能存进redis中。

4.我们在添加数据的时候key需要用键值对的形式进行表示。
例如: zadd items:sollect 1000 iphone这种形式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值