Redis简介

一、简介

1. Redis(Remote Directory Server)是一种基于key-value的NoSql内存数据库,使用C语言开发

2. 创建单实例数据库:下载、编译、安装、配置

http://www.cnblogs.com/yjmyzz/p/4105056.html

二、连接数据库

1. Windows,使用RedisDesktopManager软件

2. Linux连接线上redis数据库

a. ssh 到redis跳板机

b. redis-cli -h 127.0.0.1 -p 30006 连接集群的一台机器sentinal

-h <hostname> Server hostname (default: 127.0.0.1)

-p <port> Server port (default: 6379)

c. 在集群的一台机器上info 查询master服务器

d. 返回到redis跳板机,根据数据库名称进入真正的redis master服务器查询

redis-cli -h 127.0.0.1

select 5 // 选择第几个数据库

e. 输入密码登录:auth password

三、存储的数据类型:

1. 字符串<String>,命令:set/get/del key,最大容量是512M

2. 哈希hash,命令:hset/hget/hdel key field

3. 列表/队列<list>,命令:lpush/rpop

4. 无序集合set,没有重复数据,命令:sadd/smembers key

5. 有序集合zset,命令:zadd

四、redis命令

1. redis命令都是原子性的

2. keys:找到指定格式的key列表,但是阻塞,性能不好,不推荐使用

3. scan:无阻塞找到指定格式的key列表,但是有重复元素,如果数据量大,必须使用scan

4. 管道pipeline:将多次IO操作缩减为1次 

五、为什么存取速度快

1. 使用C语言开发

2. 纯内存访问

3. 单线程,没有线程切换带来的性能开销

4. 非阻塞多路IO复用机制

5. 每秒10万次读写操作

六、redis事务

1. redis事务的本质是一组命令的集合,一次性执行这个集合,即使用pipeline

2. 正常流程:multi->redis命令(此时命令加入了队列,并没有执行)->exec/discard

3. redis事务不保证原子性,如果编译时失败,所有命令不会被执行;如果某条命令运行失败,后面的正确的语句仍然会被被执行

4. watch命令,监控key,在开启事务后,如果key被其他线程修改,则事务执行失败;watch类似于乐观锁

5. 使用lua脚本可以保证原子性

七、redis过期策略

1. redis在内存里,如果写入的数据太多,会自动清除一部分数据

2. 定期删除:每隔100ms随机抽取一部分key,检查是否过期,过期就删除;不能检查全部,否则性能不好

3. 惰性删除:获取key的时候,检查是否过期,过期就删除

4. 定期删除+惰性删除还是会有漏掉的过期key

八、内存数据淘汰机制:当内存不足时,redis会删除一些key

1. 禁止淘汰数据

2. 随机回收

3. 最近最少使用

4. 删除更早过期时间的key

九、使用场景

1. 普通缓存

2. 会话缓存:存储多台应用服务器的会话信息

3. 查找表

4. 队列

5. 计数器:对String进行自增自减运算

6. 发布/订阅

7. 共同好友:set的交集、并集操作

8. 排行榜:zset的有序操作

参考:

https://www.cnblogs.com/leeSmall/p/8344955.html

https://www.cnblogs.com/DeepInThought/p/10720132.html

原文地址:https://www.cnblogs.com/june0816/p/6261771.html