redis面试小结一

最近在看狂神的视频 总结了一下他上课讲的东西 超级佩服膜拜狂老师

什么是Nosql

Nosql=not only sql(不仅仅是sql
Nosql泛指非关系型数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代尤其是超大规模的高并发的社区,暴露出很多难以克服的问题,Nosql在当年大数据环境下发展的十分迅速,redis是其中发展最快的,而且是我们当下必须要掌握的一门技术

很多的数据类型比如用户的个人信息、社交网络、地理位置。这些数据类型的存储不需要一个固定的格式,不需要多月的操作就可以横向扩展 比如Map<String,Object>使用键值对来控制

redis五大基本数据类型

  • String
  • List
  • Set
  • Hash
  • Zset

三种特殊数据类型

  • geo
  • hyperloglog
  • bitmap

redis持久化

  • ROB

  • AOF

了解一下3v 3高

3v :描述问题

  • 海量Volume
  • 多样Variety
  • 实时VeLocity

3高:主要对程序的要求

Nosql的四大分类

kv键值对

文档型数据库

redis

是什么?

  • redis会周期性的把更新的数据写入磁盘或者把修改的操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步、免费开源、是当下最热门的Nosql技术之一,也称结构化数据库

redis能干吗

  • 内存存储、持久化、内存中是断电即失,所以说持久化很重要(rdb 、aof)

redis是单线程的

  • redis是很快的,是基于内存的操作,cpu不是redis 性能的瓶颈,redis的瓶颈是机器的内存和网络带宽
  • redis是c语言写的 ,读写速度100000qps左右,不比k-v(对象缓存系统)的memecache差

redis为何是单线程的还这么快

  • cpu>内存>硬盘
  • redis是将所有的数据全部存储在内存中,所以说使用单线程是效率最高的,(多线程:cpu会上下文切换,这是一个耗时操作

redis基本命令

set:

  • sadd myset hello :向set集合中添加元素
  • smember mykey :查看指定set的所有值
  • sismember myset hello :判断一个值是不是在set集合中
  • scard myset :获取set集合中的内存元素个数
  • smove myset myset2 hello :移动myset的hello的值到myset2集合

hash

  • hset myhash field1 lwh :set一个具体的k-v
  • hget myhash filed1 :获取一个字段值
  • hmset myhash fileld1 hello field2 world :set 多个k-v
  • hmget myhash fileld1 fileld2 :获取多个字段值
  • hgetall myhash :获取全部数据
  • hlen myhash :获取hash表的字段数量
  • hexists myhash field1:判断hash中指定字段是否存在
  • hkeys myhash:获取所有的(key)filed
  • hvals myhash:获取所有的value

hash适合存储user name age 尤其是用户信息之类的,经常变动的信息,hash 更适合于对象的存储,string更适合字符串存储

zset

  • 有序的set集合
  • 可进行排序

geo

  • 存储地理位置信息

hyperloglog(有较小的误差0.81%的错误率 ,效率高)

  • 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
  • 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

​ bitmap

  • 位存储 就0 1 两个状态

相关文章

在笔者近 3 年的 Java 一线开发经历中,尤其是一些移动端、用...
这一篇文章拖了有点久,虽然在项目中使用分布式锁的频率比较...
本文梳理总结了一些 Java 互联网项目中常见的 Redis 缓存应用...
书接上回,消息通知系统(notification-system)作为一个独立...
Redis 是目前互联网后端的热门中间件之一,在许多方面都有深...
在Java Spring 项目中,数据与远程数据库的频繁交互对服务器...