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+Tair
- 阿里、百度:redis+memecashe
文档型数据库
- MongoDB:
- 基于分布式的文件存储的数据库,主要用于处理大量文档,c++写的
- 是一种介于关系型数据库与非关系型数据库中间的产品,是非关系型数据库中功能最丰富,最想关系型数据库的
- ConthDB
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 两个状态
标签:存储,set,myhash,数据库,redis,面试,内存,小结 来源: https://blog.csdn.net/java_cch/article/details/117885055