Redis学习笔记:
1.非关系型数据库,NoSQL(Not Only SQL)比普通的关系型数据库在某些方面更有优势,例如在海量数据存储中的高效率存储和访问,高并发读写,高可扩展性和高可用性等。NoSQL数据库的四大分类:Key-Value存储,列存储,文档数据库,图形数据库等,其中Redis数据库用到了k-v存储。
2.Redis是用C语言开发的开源的高性能的键值对的数据库,提供多种不同键值数据类型来适应不同场景下的需求,例如:字符串类型(String),列表类型(List),有序集合类型(sorted Set),散列类型(hash),集合类型(Set)。应用场景:缓存,任务队列,网站访问统计,数据过期处理,排行榜,分布式集群架构的session分离。
3.Redis的安装:建议在Linux上安装。
4.在实际的开发中,通常用其他的工具来对Redis进行读取和写入,例如Jedis,是官方推荐的Java客户端开发包,用来连接Redis。
5.Redis数据结构中Key的要求:不能过长和过短,要有统一的命名规范。String类型在Redis中以二进制的格式进行存储,且存入和读取的数据相同,且最多可容纳512M,常用命令:赋值(set key value),取值(get key),修改(getset key value[修改后的value]),删除(del key),计数(incr k)(decr k)。
6.Hash:键值对类型,是String Key 和 String Value的map容器。常用命令:赋值(hset key 【key value】,hmset key 【key ,value】【】),删除(hdel key 【key】【key】),自学命令,取值(hget key /hmget/hgetall),增加数字。
7.List:包括ArrayList和LinkedList。常用命令:两端添加(lpush mylist a b c / rpush),查看列表(lrange mylist 0 6),两端弹出(lpop mylist / rpop),获取列表元素个数(llen mylist),扩展。
8.存储set:set集合中不允许出现重复的元素。常用命令:添加(sadd myset a b c),删除(srem myset 1 2),查看(smembers myset / smember myset a),集合的差集运算(返回两个集合不相同的元素 sdiff mya1 myb1),交集运算(sinter mya2 myb2),并集运算( )。
9.sorted-set:添加(zadd mysort )
10.Redis的特性:可以包含多个数据库,0-16号数据库,客户端默认连接0号数据库;支持事务操作机制,multi 开启数据库,exec 提交,discard 回滚。
11.Redis的持久化:因为Redis存储的数据存放在内存中,断电即消失,所以需要进行持久化操作,将数据转到硬盘中,有两种方式进行操作:RDB持久化():指定的时间间隔内将内存中的数据和快照写入到磁盘中,优势:整个Redis数据库只包含一个文件,方便恢复,性能最大化,如果数据集很大,数据库启动效率更高。劣势:如想保证数据的高可用性,即最大限度保证数据的丢失,不要选择这种方法,因为还没到时间进行保存数据或许就宕机了,数据即丢失。配置:save 300 10 即每300秒有10个key发生变化就进行保存;AOF持久化:以日志的方式记录服务器所处理的每一步操作。优势:可以有更高的安全性。劣势:效率比RDB低。同时使用RDB和AOF。
redis面试常见问题总结:https://blog.youkuaiyun.com/qq_34337272/article/details/80012284 https://blog.youkuaiyun.com/middleware2018/article/details/80355418 https://www.cnblogs.com/lfs2640666960/p/9700706.html
面试的几大主要问题:
Redis是什么??
1 Redis与Memcached的区别与比较
2 Redis常见数据结构使用场景
3 MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据(redis有哪些数据淘汰策略???)
4 Redis的并发竞争问题如何解决?
5 Redis回收进程如何工作的? Redis回收使用的是什么算法?
6 Redis 大量数据插入
7 Redis 分区的优势、不足以及分区类型
8 Redis持久化数据和缓存怎么做扩容?
9 Redis与消息队列
10 redis的发布与订阅
11 redis的服务相关的命令
12 Redis集群