十年开发经验之Rides

一、什么是Redis?它主要用来什么的?

       Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。他是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件

1.1 主要特点:

  • 基于内存存储,读写性能高

  • 适合存储热点数据(热点商品、资讯、新闻)

  • 企业应用广泛

  • 官方提供的资料中提供100000+的QPS(每秒内查询次数)

  • 称为结构化的NoSql数据库。

二、五种常用数据类型介绍

Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:

  • 字符串 string

  • 哈希 hash

  • 列表 list

  • 集合 set

  • 有序集合 sorted set / zset

三、命令 

1.1 string的常用命令 

  1. SET key value ---->  设置指定key的值
  2. GET key ---->  获取指定key的值
  3. SETEX key seconds value ----> 设置指定key的值,并将key的过期时间设置为seconds 秒
  4. SETNX key value ----> 只有在key 不存在时设置key的值
  5. INCR key value ---->  当前值自增 加1
  6. DECR key value ---->  当前值自减 减一

2.1 hash的常用命令 

  1. HSET key field value --->将哈希表key中的字段field的值设为value
  2. HGET key field ---->获取存储在哈希表中指定字段的值
  3. HDEL key field ----> 删除储存在哈希表中的指定字段
  4. HKEYS key ----> 获取哈希表中所有字段
  5. HVALS key ----> 获取哈希表中所有值
  6. HEXUSTS key field ----> 查看哈希表key中,指定的字段是否存在
  7. HGETALL key ----> 获取所有键值对
  8. HMSET key field1 value1 [field2 value2] ---->同时将对各field value对设置到哈希表key中
  9. HMGET key field1 [field2] ----> 获取所有给定字段的值

3.1 list操作命令 

  1. LPUSH key value[value2] ----> 从列表的左边压入元素
  2. RPUSH key value[value2] ----> 从列表的右边压入元素
  3. LLEN key  ----> 获取列表元素个数
  4. LRANGE key start stop 获取指定下标范围内的元素,下标从0开始, 获取所有值0-1
  5. RPOP key ----> 弹出最后一个元素 -- 弹出【获取到元素后,并删除元素】
  6. LINDEX key index ----> 获取指定下标的元素
  7. BRPOP  ---->弹出最后一个元素,从右边开始弹出元素,如果前的列表弹完了,就一次从后面的列表弹出元素,如果列表没有元素了就会等待超时你设置的时间或者发现有可以弹出的元素
  8. BRPOPLPUSH ----> 把远列表最后一个元素弹出,压入到目标列表

 四、应用场景

  1. 缓存:这应该是 Redis 最主要的功能了,也是大型网站必备机制,合理地使用缓存不仅可以加 快数据的访问速度,而且能够有效地降低后端数据源的压力。
  2. 共享Session:对于一些依赖 session 功能的服务来说,如果需要从单机变成集群的话,可以选择 redis 来统一管理 session。
  3. 消息队列系统:消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务 解耦、非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功 能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功 能基本可以满足。比如在分布式爬虫系统中,使用 redis 来统一管理 url队列。
  4. 分布式锁:在分布式服务中。可以利用Redis的setnx功能来编写分布式的锁,虽然这个可能不是太常用。 当然还有诸如排行榜、点赞功能都可以使用 Redis 来实现,但是 Redis 也不是什么都可以做,比如数据量特别大时,不适合 Redis,我们知道 Redis 是基于内存的,虽然内存很便宜,但是如果你每天的数据量特别大,比如几亿条的用户行为日志数据,用 Redis 来存储的话,成本相当的高。