一.初识Redis
1.什么是Redis
简记: Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化
的日志型、Key-Value
型NoSQL数据库
,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware
主持。从2013年5月开始,Redis的开发由Pivotal赞助。
\
官方解释: Redis是一个基于BSD开源的项目,是一个把结构化的数据放在内存中的一个存储系统,你可以把它作为数据库,缓存和消息中间件来使用。同时支持strings,lists,hashes,sets,sorted sets,bitmaps,hyperloglogs和geospatial indexes等数据类型。它还内建了复制,lua脚本,LRU,事务等功能,通过redis sentinel实现高可用,通过redis cluster实现了自动分片。以及事务,发布/订阅,自动故障转移等等。
Redis官网地址:https://redis.io/docs/about/
Redis官方推荐在Linux环境下进行部署,可以通过这篇博客进行部署安装Redis:Linux环境下安装Redis(保姆级教程)
2.Redis 六大特性
3.Redis客户端通用命令
启动Redis服务端
启动Redis客户端
- select用于选择数据库(Redis默认16个数据库,由于我在配置文件中配置了databases为256,所以当前我的数据库中有0~255个数据库)
选择第0个数据库(类似于mysql中的user 数据库名;)
set key value
命令用户写入字符串数据,通过get key
命令获取key对应的value
向数据库0写入二条数据,key=a value =1 和key = b value = 2
通过get 获取key=a的值
- keys查询数据库中所有的键信息
可以通过 keys *
命令查询出所有的key信息
并且还可以增加相应条件进行查询,如:
条件1:*表示任意字符
条件2:[h-l]表示字符在l-h中的字符
条件3:?表示匹配1个任意字符
- dbsize查询当前数据库key的总数
- exists用户查找当前key是否存在(1:表示存在,0:表示不存在)
- del删除指定key的数据(1:删除成功,0:删除失败)
- expire设置当前key多少秒后过期(删除),ttl用于查询过期剩余时间
二.Redis中支持的五种数据结构
Redis常用的五种数据结构如下表:
1.Redis数据结构-String
字符串类型结构是一种String-JSON序列化,这种方式优点就是编程简单,节约内存,缺点就是序列化开销,无法更新部分属性,注意
String最大512mb,建议单个key和Value不要超过100kb
。
字符串结构应用场景:
Redis字符串指令
- msget和mget
- incr/decr和 incrby/decrby
2.Redis数据结构-Hash
① Hash类型用于存储结构化数据(1个key可以保存一个对象).
② Hash可以看做是Map中的Map
③ 这种方式优点直观,可部分更新;缺点多层嵌套实现困难,序列化/反序列化编程麻烦
hash结构图如下:
Redis中Hash数据结构指令:
通过 del user:2:info
命令删除一个Hash对象:
3.Redis数据结构-List
① List列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
② 一个列表最多可以包含2的32次方- 1个元素(4294967295, 每个列表超过40亿个元素)。
Redis中List数据类型指令:
通过 del listkey
命令删除整个list:
List典型场景:
4.Redis数据结构-Set
① Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
② Redis 中集合是通过哈希表实现的,所以添加,删除,查找的速度极快。
③ 集合中最大的成员数为 2的32次方- 1 (4294967295,每个集合可存储40多亿个成员)。
Redis中Set数据结构的指令:
key= user:1:follow
key=user:2:follow
差集,交集和并集:
通过 del user:1:follow(Set的Key)
命令删除单个Set:
Set应用场景(共同关注交集部分信息):
5.Redis数据结构-Zset
Redis 的 Set 是 String 类型的有序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis中Z-set数据结构指令:
排名最低从0开始(根据分数进行排名,最低为0,一次往上加一)
使用 flushdb
命令清空当前数据库中的所有数据:
使用 zrangebyscore player:rank 700 901
命令根据分数进行排序:
应用场景(游戏榜单):