REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

NoSql not only sql 不仅仅是数据库,非关系型数据库。高并发,高负载,高扩展。

Redis是C语言开发的一个 官方50并发执行10万个请求,读11万次/s写8万次/s

键对存储数据,value5种类型: 字符串string、列表list、集合set、有序集合sort sets、哈希表hash

缓存,在线好友列表,任务队列,数据过期处理

service redis status

redis-cli 打开数据库 redis-cli --raw解决显示乱码

 

Jedis jedis = new Jedis(host,port);

JedisPool pool = new JedisPool(JedisConfig,host,port)

1.String

常用命令:  set,get,decr,incr,mget 等。

2.Hash

常用命令: hget,hset,hgetall 等。

3.List

常用命令:  lpush,rpush,lpop,rpop,lrange等

4.Set

常用命令: sadd,spop,smembers,sunion 等

5.Sorted Set

常用命令: zadd,zrange,zrem,zcard等

keys通用操作

keys pattern

del key1,key2

。。。。。

 

面试:

1,Redis与Memcached的选择

终极策略: 使用Redis的String类型做的事,都可以用Memcached替换,以此换取更好的性能提升; 除此以外,优先考虑Redis;

2,使用redis有哪些好处?

(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)

(2)支持丰富数据类型,支持string,list,set,sorted set,hash

(3) 支持事务,操作原子性,就是对数据的更改要么全部执行,要么全部不执行

(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

3,MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据(redis有哪些数据淘汰策略???)

redis 内存数据集大小上升到一定大小时,执行数据淘汰策略(回收策略)。有6种方式让他体面

1. volatile-lru:从已设置过期时间的数据集(server.db[i].expires)把最近最少使用的数据淘汰

2. volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)把将要过期的数据淘汰

3. volatile-random:从已设置过期时间的数据集(server.db[i].expires)把任意选择数据淘汰

4. allkeys-lru:从数据集(server.db[i].dict)中把最近最少使用的数据淘汰

5. allkeys-random:从数据集(server.db[i].dict)中把任意选择数据淘汰

6. no-enviction(驱逐):禁止驱逐数据

4,Redis的并发竞争问题如何解决?

Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,但是在Jedis客户端对Redis进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。对此有2种解决方法:

 1.客户端角度,为保证每个客户端间正常有序与Redis进行通信,对连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。

  2.服务器角度,利用setnx实现锁。

 注:对于第一种,需要应用程序自己处理资源的同步,可以使用的方法比较通俗,可以使用synchronized也可以使用lock;第二种需要用到Redis的setnx命令,但是需要注意一些问题。

Redis回收进程如何工作的? Redis回收使用的是什么算法?

Redis内存回收:LRU算法(写的很不错,推荐):

https://www.cnblogs.com/WJ5888/p/4371647.html

Redis 大量数据插入

官方文档给的解释:

http://www.redis.cn/topics/mass-insert.html

Redis 分区的优势、不足以及分区类型

官方文档提供的讲解:

http://www.redis.net.cn/tutorial/3524.html

Redis持久化数据和缓存怎么做扩容?

《redis的持久化和缓存机制》 :

 

扩容的话可以通过redis集群实现,做项目的时候用过自己搭的redis集群

https://juejin.im/post/5ad54d76f265da23970759d3

 

Redis常见性能问题和解决方案:

Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件

如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次

为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内

尽量避免在压力很大的主库上增加从库

Redis与消息队列

不要使用redis去做消息队列,这不是redis的设计目标。但实在太多人使用redis去做去消息队列,redis的作者看不下去,另外基于redis的核心代码,另外实现了一个消息队列disque: antirez/disque:https://github.com/antirez/disque部署、协议等方面都跟redis非常类似,并且支持集群,延迟消息等等。

我在做网站过程接触比较多的还是使用redis做缓存,比如秒杀系统,首页缓存等等。