曹阳的博客 仅用于学习和分享

Redis的学习

2019-10-14

Redis的学习

Redis简介

NoSQL

  1. 关系型数据库:Oracle,MySQL,DB2(表结构,主外键)

  2. 非关系型数据库四大类:

  • 键值(key-value)存储数据库:Redis

  • 列存储数据库:HBase(大数据)

  • 文档型数据库:MongoDB

  • 图形(Graph)数据库:Neo4J

Redis主要用于数据缓存,为什么?

  1. 数据库做存储每次写进去或拿出来,都必须建立连接,执行sql,把数据从服务器拿过来使用,再断掉连接.

  2. 现在的程序结构:计算机中有Tomcat(web服务器)和Oracle(数据库服务器),浏览器请求Tomcat,Tomcat访问Oracle,Oracle返回Tomcat,Tomcat响应浏览器

  3. 一个计算机既要承担web服务器,又要数据库服务器,如果配置低,效率就会比较低,所以就把数据库拿出来单独用一台机器

  4. Redis是完全借助内存的,Oracle是把数据存在磁盘中,从Oracle中读数据就要把数据载入到内存中,从内存给到程序,所以Redis是非常快的

  5. 所以用Redis做缓存,先去Redis中找数据,没有再去Oracle服务器中找

  6. 查询频率高的用缓存,更新操作多的不用

什么是Redis

  1. Redis是一个开源的,先进的key-value存储可用于构建高性能,可扩展的web应用程序的解决方案(key-value结构查找复杂度低,查询速度最快的)(Oracle是表结构,表里多行多列,字段值可以有多种类型)

  2. Redis可看做”内存中的数据结构服务器”.目前Redis支持列表、集合、可排序集合、哈希等数据结构(指的是value值可以有多种类型)

  3. Redis支持多种语言,诸如Java、PHP、Ruby、Python、lua等

  4. Redis的官方网站是:http://www.redis.io/ (点安装目录的redis-cli.exe登录进来)

Redis的优点

  1. 异常快速:每秒可以执行大约110000设置操作,81000个读取操作(同步:发请求回调发请求回调发请求回调;异步:发请求发请求发请求回调回调回调)

  2. 支持丰富的数据类型,例如列表,集合,可排序集合,哈希等数据类型

  3. 支持数据的持久化,Redis提供了一些策略将内存中的数据异步地保存到磁盘上,比如根据时间或更新次数(内存存储不安全,一断电就全没了)

  4. Redis是一个多功能实用工具,具有缓存、消息传递等功能

各种类型数据存储命令(redis-cli启动服务)

1. 字符串操作

value是string

  1. 在指定键设置值SET key value
    value值中有空格时必须加引号

  2. 获取键对应的值GET key

  3. 设置键的字符串值,并返回旧值GETSET key value

  4. 得到存储在键得到值的长度STRLEN key

  5. 设置多个键和多个值MSET key value [key value ...]

  6. 键的整数值加1INCR key

  7. 键的整数值加valueINCRBY key value

  8. 键的整数值减1DECR key

  9. 键的整数值减valueDECRBY key value

  10. 为原来键值追加valueAPPEND key value
    返回值是value的长度

2. key操作

key是string

  1. 删除键,如果存在DEL key

  2. 检查该键是否存在EXISTS key

  3. 指定键的过期时间EXPIPE key seconds
    如:session默认过期时间30分钟,也可以把键的过期时间设为30分钟,用Redis存储session数据做session用

  4. 设置键以毫秒为单位到期PEXPIRE key milliseconds

  5. 移除过期的键PERSIST key

  6. 查找与指定模式匹配的所有键KEYS pattern
    pattern是表达式,如KEYS *就是查询所有所有的键

  7. 该命令返回存储在指定键的值得序列化结果DUMP key

  8. 从Redis返回随机键RANDOMKEY

  9. 更改键的名称RENAME key newkey

  10. 返回存储在键的值的数据类型TYPE key

  11. 以毫秒为单位获取剩余时间的到期键PTTL key

  12. 获取键到期的剩余时间TTL key

3. 哈希操作

value是hash:字段名1 字段值1 字段名2 字段值2…

  1. 设置多个哈希字段的多个值HMSET key field1 value1 field2 value2

  2. 设置哈希字段的字符串值HSET key field value

  3. 获取存储在指定的键散列字段的值HGET key field

  4. 获取所有给定的哈希字段的值HMGET key field1 [field2]

  5. 统计字段数量HLEN key

  6. 获取所有哈希表中的字段HKEYS key

  7. 删除一个或多个哈希字段HDEL key field2 [field]

  8. 判断一个哈希字段存在与否HEXISTS key field

4. 列表操作

value是list:string1 string2…
Redis列表是简单的字符串列表,按插入顺序排序.您可以在头部或列表的尾部给列表添加元素
既可以模拟队列又可以模拟栈

  1. 在前面加上一个或多个值的列表LPUSH key value1 [value2]
    列表不存在自动创建一个

  2. 在末尾加上一个或多个值得列表RPUSH key value1 [value2]
    列表不存在自动创建一个

  3. 返回存储在key列表的特定元素LRANGE key start stop
    0是第一个元素(该列表的头部),1是列表的下一个元素,-1是列表的最后一个元素,-2是倒数第二个

  4. 获取列表的长度LLEN key

  5. 从头部删除一个元素,并返回该删除的元素LPOP key

  6. 从尾部删除一个元素,并返回该删除的元素RPOP key

  7. 对列表元素剪切,保留指定key范围内的数据LTRIM key begin end

  8. 从一个列表其索引获取对应的元素LINDEX key index

  9. 在前面加上一个值列表LPUSHX key value
    仅当列表中存在,不成功返回0

  10. 在末尾加上一个值列表RPUSHX key value
    仅当列表中存在,不成功返回0

  11. 移除等于value的元素LREM key count value
    当count>0时,从表头开始查找,移除count个;
    当count=0时,从表头开始查找,移除等于value的;
    当count<0时,从表尾开始查找,移除|count|个

  12. 将值插入到pivot的前面或后面LINSERT key BEFORE|AFTER pivot value
    如果有多个pivot,以离表头最近的为准

  13. 设置列表指定索引的值LSET key index value
    如果索引不存在则报错

5. 集合操作

value是set:string1 string2…
集合成员是无序的,唯一的,不重复的
可用来随机取卷

  1. 向集合增加元素SADD key member [member...]

  2. 从集合删除元素SREM key member [member...]

  3. 获得集合中的所有元素SMEMBERS key

  4. 判断元素是否在集合中SISMEMBER key member

  5. 获得集合中元素的个数SCARD key

  6. 随机获得集合中的元素SRANGMEMBER key [count]

  7. 从列表中弹出一个元素SPOP key
    弹出元素被删除,不在原来的集合中

  8. 差集SDIFF key [key...]

  9. 交集SINTER key [key...]

  10. 并集SUNION key [key...]

  11. 将第一个集合元素value移动到第二个集合中SMOVE key1 key2 value

  12. 执行差集运算并存储到另一个set中SDIFFSTORE key key1 key2

  13. 执行并集运算并存储到另一个set中SINTERSTORE key key1 key2

  14. 执行并集运算并存储到另一个set中SUNIONSTORE key key1 key2

6. 有序集合操作

value是set:string1 string2…
集合成员是有序的,唯一的,value不可重复,分数(score)是可以重复的
每个元素都会关联一个double类型的分数.Redis通过分数来为集合中的成员进行从小到大的排序.
可以用来统计成绩

  1. 向有序集合添加一个或多个成员,或者更新已存在成员的分数ZADD key score1 member1 [score2 member2]

  2. 获取有序集合的成员数ZCARD key

  3. 计算在有序集合中指定区间分数的成员数ZCOUNT key min max

  4. 获得元素的分数ZSCORE key member

  5. 通过索引区间返回有序集合指定区间内的成员(小到大)ZRANGE key start stop [WITHSCORES]

  6. 通过索引区间返回有序集合指定区间内的成员(大到小)ZREVRANGE key start stop [WITHSCORES]

  7. 根据排序索引的score来返回元素ZRANGEBYSCORE key score1 score2

  8. 返回元素在集合中的排序位置,就是索引值ZRANK key member

  9. 返回有序集合中指定成员的排名ZREVRANK key member
    有序集成员按分数值递减(从大到小)排序

  10. 删除名称为key的zset中的元素memberZREM key member

  11. 增加一个元素的分数,返回值是更改后的分数ZINCRBY key number member

  12. 按照元素分数从小到大顺序删除指定范围内所有的元素ZREMRANGEBYRANK key start stop

  13. 删除集合中在给定排序区间的元素(按score)ZREMRANGESCORE key min max


上一篇 Oracle的学习2

Content