附面试题,02-Redis常用数据类型,mysql性能优化面试题

    • 概述
  • 常用数据类型

  • String类型操作实践

    • incr/incrby
  • decr/decrby

  • append

  • strlen

  • mset/mget

  • 小节面试分析

  • Hash类型应用实践

    • hset/hget
  • hincrby

  • hmset/hmget

  • hexists

  • hdel

  • hkeys/hvals

  • 小节面试分析

  • List类型应用实践

    • lpush
  • rpush

  • del

  • linsert

  • lset

  • lrem

  • ltrim

  • lpop

  • rpop

  • llen

  • lindex

  • rpoplpush

  • 小节面试分析

  • Set类型应用实践

    • sadd
  • smembers

  • spop

  • scard

  • smove

  • sunion

  • 小节面试分析

  • 总结(Summary)

简介

============================================================

概述


Redis作为一种key/value结构的数据存储系统,为了便于对数据进行进行管理,提供了多种数据类型。然后,基于指定类型存储我们项目中产生的数据,例如用户的登陆信息,购物车信息,商品详情信息等等。

常用数据类型


Reids中基础数据结构包含字符串、散列,列表,集合,有序集合。工作中具体使用哪种类型要结合具体场景。

String类型操作实践

======================================================================

字符串类型是redis中最简单的数据类型,它存储的值可以是字符串,其最大字符串长度支持到512M。基于此类型,可以实现博客的字数统计,将日志不断追加到指定key,实现一个分布式自增iid,实现一个博客的的点赞操作等

incr/incrby


当存储的字符串是整数时,redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。

语法:INCR key

127.0.0.1:6379> set num 1

(integer) 1

127.0.0.1:6379> incr num

(integer) 2

127.0.0.1:6379> keys *

  1. “num”

127.0.0.1:6379> incr num

127.0.0.1:6379>

说明,如果num不存在,则自动会创建,如果存在自动+1。

指定增长系数

语法:INCRBY key increment

127.0.0.1:6379> incrby num 2

(integer) 5

127.0.0.1:6379> incrby num 2

(integer) 7

127.0.0.1:6379> incrby num 2

(integer) 9

127.0.0.1:6379>

decr/decrby


减少指定的整数

DECR key 按照默认步长(默认为1)进行递减

DECRBY key decrement 按照指定步长进行递减

127.0.0.1:6379> incr num

(integer) 10

127.0.0.1:6379> decr num

(integer) 9

127.0.0.1:6379> decrby num 3

append


向尾部追加值。如果键不存在则创建该键,其值为写的value,即相当于SET key value。返回值是追加后字符串的总长度。

语法:APPEND key value

127.0.0.1:6379> keys *

  1. “num”

  2. “test1”

  3. “test”

127.0.0.1:6379> get test

“123”

127.0.0.1:6379> append test “abc”

(integer) 6

127.0.0.1:6379> get test

“123abc”

127.0.0.1:6379>

strlen


字符串长度,返回数据的长度,如果键不存在则返回0。注意,如果键值为空串,返回也是0。

语法:STRLEN key

127.0.0.1:6379> get test

“123abc”

127.0.0.1:6379> strlen test

(integer) 6

127.0.0.1:6379> strlen tnt

(integer) 0

127.0.0.1:6379> set tnt “”

OK

127.0.0.1:6379> strlen tnt

(integer) 0

127.0.0.1:6379> exists tnt

(integer) 1

127.0.0.1:6379>

mset/mget


同时设置/获取多个键值

语法:MSET key value [key value …]

MGET key [key …]

127.0.0.1:6379> flushall

OK

127.0.0.1:6379> keys *

(empty list or set)

127.0.0.1:6379> mset a 1 b 2 c 3

OK

127.0.0.1:6379> mget a b c

  1. “1”

  2. “2”

  3. “3”

127.0.0.1:6379>

小节面试分析


  • 博客的字数统计如何实现?(strlen)

  • 如何将审计日志不断追加到指定key?(append)

  • 你如何实现一个分布式自增id?(incr-雪花算法)

  • 如何实现一个博客的的点赞操作?(incr,decr)

Hash类型应用实践

====================================================================

Redis散列类型相当于Java中的HashMap,实现原理跟HashMap一致,一般用于存储对象信息,存储了字段(field)和字段值的映射,一个散列类型可以包含最多232-1个字段。

hset/hget


语法结构

HSET key field value

HGET key field

HMSET key field value [field value…]

HMGET key field [field]

HGETALL key

HSET和HGET赋值和取值

127.0.0.1:6379> hset user username chenchen

(integer) 1

127.0.0.1:6379> hget user username

“chenchen”

127.0.0.1:6379> hset user username chen

(integer) 0

127.0.0.1:6379> keys user

  1. “user”

127.0.0.1:6379> hgetall user

  1. “username”

  2. “chen”

127.0.0.1:6379>

127.0.0.1:6379> hset user age 18

(integer) 1

127.0.0.1:6379> hset user address “xi’an”

(integer) 1

127.0.0.1:6379> hgetall user

  1. “username”

  2. “chen”

  3. “age”

  4. “18”

  5. “address”

  6. “xi’an”

127.0.0.1:6379>

HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。

hincrby


127.0.0.1:6379> hdecrby article total 1 #执行会出错

127.0.0.1:6379> hincrby article total -1 #没有hdecrby自减命令

(integer) 1

127.0.0.1:6379> hget article total #获取值

hmset/hmget


HMSET和HMGET设置和获取对象属性

127.0.0.1:6379> hmset person username tony age 18

OK

127.0.0.1:6379> hmget person age username

  1. “18”

  2. “tony”

127.0.0.1:6379> hgetall person

  1. “username”

  2. “tony”

  3. “age”

  4. “18”

127.0.0.1:6379>

注意:上面HMGET字段顺序可以自行定义

hexists


属性是否存在

127.0.0.1:6379> hexists killer

(error) ERR wrong number of arguments for ‘hexists’ command

127.0.0.1:6379> hexists killer a

(integer) 0

127.0.0.1:6379> hexists user username

(integer) 1

127.0.0.1:6379> hexists person age

(integer) 1

127.0.0.1:6379>

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。







由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

671)]
[外链图片转存中…(img-cz3OjDtt-1712554827671)]
[外链图片转存中…(img-EuIJJsBA-1712554827672)]
[外链图片转存中…(img-JelslgVE-1712554827672)]
[外链图片转存中…(img-5MKJwc2E-1712554827673)]
[外链图片转存中…(img-m06zt1kZ-1712554827673)]

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值