Redis介绍

  1. 定义
    redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。

  2. 为什么使用

  • 可以很好解决应用服务器的cpu和内存压力
  • 减少io的读操作,减轻io的压力
  • 关系型数据库的扩展性不强,难以改变表结构
  • nosql数据库没有关联关系,数据结构简单,拓展表比较容易
  • nosql读取速度快,对较大数据处理快
  1. 适用场景
  • 数据高并发的读写
  • 海量数据的读写
  • 对扩展性要求高的数据
  1. 不适用场景
  • 需要事务支持(非关系型数据库)
  • 基于sql结构化查询储存,关系复杂
  1. 支持的数据类型
    Redis一共支持五种数据类:string(字符串),hash(哈希),list(列表),set(集合)和zset(sorted set有序集合)。

    1> string(字符串)
    它是redis的最基本的数据类型,一个键对应一个值,需要注意是一个键值最大存储512MB。

    2> hash(哈希)
    redis hash是一个键值对的集合,是一个string类型的field和value的映射表,适合用于存储对象

    3> list(列表)
    是redis的简单的字符串列表,它按插入顺序排序

    4> set(集合)
    是字符串类型的无序集合,也不可重复

    5> zset(sorted set有序集合)
    是string类型的有序集合,也不可重复
    有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序,如果多个元素有相同的分数,则以字典序进行升序排序,sorted set因此非常适合实现排名

  2. 常用命令

  • 启动命令:
    本地启动:redis-cli
    远程启动:redis-cli -h host -p port -a password
  • 连接命令
    AUTH password ------ 验证密码是否正确
    ECHO message ------ 打印字符串
    PING ------ 查看服务是否运行
    QUIT ------ 关闭当前连接
    SELECT index ------ 切换到指定的数据库
  • keys 命令
    1. DUMP key ------ 序列化给定的key并返回序列化的值
    2. EXISTS < key> ------ 判断key是否存在,存在返回1,不存在返回0
    3. EXPIRE < key> < seconds> ------ 设置key过期时间为seconds,存在设置过期秒数后返回1,不存在key返回0
    4. EXPIRE < key> < timestamp> ------ 用时间戳的方式给key设置过期时间
    5. MOVE key db ------ 将当前数据库的key移动到数据库db当中
    6. TTL < key> ------ 以秒为单位,返回给定 key 的剩余生存时间,剩余时间为0时,key就不可用
    7. PTTL < key> ------ 以毫秒为单位,返回给定key的剩余生存时间
    8. PERSIST < key> ------ 移除 key 的过期时间,key 将持久保持
    9. KEYS pattern ------ 返回符合pattern模式的key,例如返回test开头的key,keys test*
  • 字符串命令
    1. SET key value
    2. GET < key> ------ 获取缓存,如果存在返回key对应的值,不存在返回nil
    3. GETRANGE key start end ------ 返回key中字符串值的子字符
    4. GETSET key value ------ 将给定key的值设为value,并返回key的旧值
    5. GETBIT KEY OFFSET ------ 对key所储存的字符串值,获取指定偏移量上的位
    6. MGET KEY1 KEY2 ------ 获取一个或者多个给定key的值
    7. SETBIT KEY OFFSET VALUE ------ 对key所是存储的字符串值,设置或清除指定偏移量上的位
    8. SETEX key seconds value ------ 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
    9. SETNX key value ------ 只有在 key 不存在时设置 key 的值。
    10. SETRANGE key offset value ------ 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
    11. STRLEN key ------ 返回 key 所储存的字符串值的长度。
    12. MSET key value [key value …] ------ 同时设置一个或多个 key-value 对。
    13. MSETNX key value [key value …] ------ 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
    14. PSETEX key milliseconds value ------ 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
    15. INCR key ------ 将 key 中储存的数字值增一。
    16. INCRBY key increment ------ 将 key 所储存的值加上给定的增量值(increment) 。
    17. INCRBYFLOAT key increment ------ 将 key 所储存的值加上给定的浮点增量值(increment) 。
    18. DECR key ------ 将 key 中储存的数字值减一。
    19. DECRBY key decrement ------ key 所储存的值减去给定的减量值(decrement) 。
    20. APPEND key value ------ 如果 key 已经存在并且是一个字符串, APPEND 命令将 指定value 追加到改 key 原来的值(value)的末尾。
    待补充
  • hash命令
  • list命令
  • set命令
  • zset命令
  1. 持久化
    1. 两种方式:rdb(redis database)和aof(append of file)
    2. RDB:在指定时间间隔内,将内存中的数据作为一个快照文件(snapshot)写入到磁盘,读取的时候也是直接读取snapshot文件到内存中

①持久化过程:redis单独创建(fork)一个进程来持久化,会先将数据写入临时文件中,待上次持久化结束后,会将该临时文件替换上次持久化文件,比aof高效,但是最后一次数据可能会丢失

②Fork:在linux中,fork()会产生一个跟主进程一样的子进程,出于效率考虑,主进程和子进程会公用一段物理内存,当发生改变的时候,才会把主进程“”写时复制”一份给子进程

③Redis备份的文件:在redis.conf中设置,dbfilename默认为:dump.rdb

  1. Redis的并发竞争问题如何解决?
    Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,但是在Jedis客户端对Redis进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。对此有2种解决方法:
     1.客户端角度,为保证每个客户端间正常有序与Redis进行通信,对连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。
     2.服务器角度,利用setnx实现锁。
     注:对于第一种,需要应用程序自己处理资源的同步,可以使用的方法比较通俗,可以使用synchronized也可以使用lock;第二种需要用到Redis的setnx命令,但是需要注意一些问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值