Contents
  1. 1. 待办事项
  2. 2. 参考资料
  3. 3. Redis特点
  4. 4. Redis的应用
  5. 5. 面试题
  6. 6. Redis介绍
  7. 7. Redis实际运用
    1. 7.1. Redis instal
    2. 7.2. Redis 启动和连接
  8. 8. Redis 常见命令
  9. 9. Redis 请求竞争
  10. 10. redis事件驱动

待办事项

  • redis和memcache的区别(微信有篇公众号非常详细深刻)(Done)
  • Redis sentinel(Done)
  • 数据结构和原理(Done)
  • 注册中心(Done)
  • 缓存服务器整合Spring和分布式Session
  • 常见面试题(Done)
  • 单机配置、集群Cluster和灾备的配置(Done)
  • 分布式锁(Done)
  • LRU失效策略(Done)

参考资料

redis 5种数据结构和相关命令
https://www.cnblogs.com/Cwj-XFH/p/6938799.html

好的博客,待刷一下
https://blog.csdn.net/zhiguozhu/article/details/50517527

要看完 redis和memcached的区别
http://blog.jobbole.com/101496/

redis的数据结构超级详细
https://www.cnblogs.com/qwangxiao/p/8921171.html

Redis特点

  • redis是单线程IO复用(读写排序等操作公用唯一的线程),事件驱动(文件事件和时间事件)
  • 速度快,利用内存保存数据,用作缓存服务器,但是支持数据持久化,重启会加载持久化的数据
  • 支持丰富数据类型,支持string,list,set,sorted set,hash
  • 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
  • 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
  • 除了存储还支持排序等聚合操作
  • 支持集群和高可用,cluster集群的话,支持在线扩容。Sentinel的话,支持Mster和Slave的监控和身份切换

Redis的应用

  1. 分布式环境的计数器(或者是浏览量统计工具,利用incr函数的原子性来实现)
  2. 注册中心,在Dubbo中可以用
  3. 分布式锁,秒杀架构中,定时循环通过SETNX命令获取锁,异步处理秒杀和其它业务订单处理,再引入expire来提升容错性,再结合MQ来分散开订单
  4. 消息队列

面试题

  • Redis原理和 Memcache的区别(Done)
  • redis的集群和持久化(Done)
  • Redis的请求竞争(Done)
  • Redis的实现消息队列(Done)

Redis介绍

  • 开源,Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

  • 支持多种数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。

  • 功能强大,Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)

Redis实际运用

Redis instal

  1. 安装完之后,修改配置文件,修改daemonize设置为yes,
    守护进程模式启动 redis
  2. 设置requirepass huangzs
    然后启动之后,客户端连接之后, auth huangzs 就可以了
    https://www.cnblogs.com/756623607-zhang/p/6859540.html
  1. redis-server redis.conf

  2. spring配置密码

    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="127.0.0.1"/>
    <property name="port" value="6379"/>
    <property name="password" value="huangzs" />
    <property name="database" value="0"/>
    <property name="poolConfig" ref="poolConfig"/>
    </bean>

然后 redis-cli 直接客户端接入了

Redis 启动和连接

详细API http://doc.redisfans.com/

  • 启动

默认模式启动
./redis-server

按照config 设置模式启动(例如设置默认端口和连接密码)
redis-server.exe redis.windows.conf

可以在redis.windows.conf 设置连接密码
requirepass 123456

  • 客户端连接redis服务器 密码
    redis-cli.exe -h 127.0.0.1 -p 6379 -a 123456

Redis 常见命令

  • keys * #查看所有的键
  • flushall 清空所有缓存
  • 存取字符串
    set name ‘huangzhenshi’ #设置键值对

    setex key timeoutSecond newValue (setex city 5 newCity) 设置city的值为newCity并且设置过期时间为5s

    setnx key value(悲观锁的实现原理,如果不存在这个key就setnx成功,并返回1,否则就返回0)

    get name

    getset key value (原子操作,相当于replace操作)

  • 存取list
    lpush 命令往集合里面放东西
    lpush emp huangzs1
    lpush emp huangzs2
    lpush emp huangzs3

    lrange 从里面获取,从第一个开始取,取到下标的最后一个
    lrange emp 0 -1

  • 删除key
    DEL name

  • exists 查看是否存在,是返回1 无返回0
    exists name

  • HSET website google ‘www.google.com’

  • HGET website google
    按照hashmap的结构,在 website命名的 hashmap的key值为google, value为 ‘www.google.com’

Redis 请求竞争

多个客户端同时对某个key的value进行操作,比如秒杀商品。

  1. 乐观锁策略(在竞争不激烈的时候,性能好)
  • watch方法,带事务的修改数据,类似于volaile,如果price发生改动,则事务失效
    watch price
    get price $price
    $price = $price + 10
    multi
    set price $price
    exec
  1. 悲观锁+expire的实现策略

redis事件驱动

  • 文件事件(file event):Redis服务器通过套接字于客户端(或其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。
  • 时间事件(time event):Redis服务器的一些操作需要在给定的事件点执行,而时间事件就是服务器对这类定时操作的抽象。(比如定时扫描过期的key、rehash全局的dict、关闭超时客户端)
    事件触发回调函数来实现功能,没有文件事件的时候,线程会进入阻塞的状态从而节省CPU的开销,但是有时间事件的时候又开始响应时间事件
Contents
  1. 1. 待办事项
  2. 2. 参考资料
  3. 3. Redis特点
  4. 4. Redis的应用
  5. 5. 面试题
  6. 6. Redis介绍
  7. 7. Redis实际运用
    1. 7.1. Redis instal
    2. 7.2. Redis 启动和连接
  8. 8. Redis 常见命令
  9. 9. Redis 请求竞争
  10. 10. redis事件驱动