Redis是一个机遇内存的高性能K-V数据库,跟memcached很类似,按照Redis官网所提及每秒可以处理超过10万次读写操作,Redis出色的不仅仅是性能好,而且提供了多种数据结构,单个value最大限制10G(memcached只有1M);
Redis当中有五大数据结构:string、list、set、hash、sorted set(稍后会演示);
02 Redis数据结构String
(使用场景:微博数,粉丝数【常规计数】)
string 是 redis 最基本的数据类型。一个 key 对应一个 value(String不仅仅是字符串,还可以放数字)。
string 是二进制安全的。也就是说 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。
string 类型是 redis 最基本的数据类型,string 类型的值最大能存储 512 MB。
命令 | 解释 |
get | 获取指定key值 |
set | 设置指定key值 |
incr | 将key中存储的数字增一 |
decr | 将key中存储的数字减一 |
mget | 获取一个或多个key的值 |
演示
List
(使用场景:微博关注列表,粉丝列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。我们可以网列表的左边或者右边添加元素。
命令 | 解释 |
lpush | 将一个或者多个值插入列表头部 |
rpush | 将一个或者多个值插入列表尾部 |
lpop | 移出并获取列表的第一个元素 |
rpop | 移除列表的最后一个元素,返回值是移除的元素 |
lrange | 获取列表的最后一个元素,返回值为移除的元素 |
演示
Set
(使用场景:实现共同关注、共同喜好、二度好友)
Set就是一个集合,集合的概念就是一堆不重复值的组合。利用Redis提供的Set数据结构,可以存储一些集合性的数据;
redis的set 是字符串类型的无序集合。集合是通过哈希表实现的,因此添加、删除、查找的复杂度都是 O(1)
命令 | 解释 |
sadd | 向集合中添加一个或多个成员 |
spop | 移除并返回集合中的一个随机元素 |
smembers | 返回集合中的所有成员 |
sunion | 返回给定集合的并集 |
sdiff | 返回第一个集合的差集 |
sinter | 返回第一个集合的交集 |
演示
为了测试交集,请执行sadd names waibizi
sorted set
(使用场景:排行榜、按照用户投票和时间排序)
sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set是通过用户额外提供一个优先级(score)的参数来为成员排序
命令 | 解释 |
zadd | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
zrange | 通过索引区间返回有序集合中指定区间内的成员 |
zrem | 移除有序集合中的一个或多个成员 |
zcard | 获取有序集合的成员数 |
演示
hash
(使用场景:存储部分变更数据,如用户数据)
hash是一个string类型的field和value的映射表
理解:可以将 hash 看成一个 key - value 的集合。也可以将其想成一个 hash 对应着多个 string。
与 string 区别:string 是 一个 key - value 键值对,而 hash 是多个 key - value 键值对。
命令 | 解释 |
hset | 将哈希表key中的字段field的值设为value |
hget | 获取存储在哈希表中指定字段的值 |
hgetall | 获取在哈希表中指定key的所有字段和值 |
演示
GEO
(使用场景:LBS应用开发)
GEO功能在Redis3.2版本提供,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能.geo的数据类型为zset.
命令 | 解释 |
geoadd | 增加地理位置的坐标,可以批量添加地理位置 |
geopos | 获取指定位置的坐标,可以批量获取多个地理位置的坐标 |
geodist | 获取两个地理位置的距离 |
geohash | 获取某个地理位置的geohash值 |
georadius | 根据给定地理位置坐标获取指定范围内的地理位置集合(注意:该命令的中心点由输入得到经度和纬度决定) |
演示
stream
(使用场景:消费者生产者场景【类似MQ】)
这个是在5.0版本之后才支持的,作者也是拿MQ去描述了这个stream
命令 | 解释 |
xadd | 往指定的stream添加消息 |
xlen | stream中的消息数量 |
xdel | 删除流中的消息 |
xrange | 返回stream中满足给定ID范围的消息 |
xread | 从一个或者多个stream的中读取数据 |
xinfo | 检索关于流和关联的消费者组的不同信息 |
演示
前排小知识
String
ZSet
Hash
Geo
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。
虽然Redis支持发布订阅功能,但是却不适合做发布订阅的工作,客户端需要一直在线才可以接收消息,类似发布订阅的工作还是交给专业的MQ中间件处理吧!
05 Redis事务redis 事务一次可以执行多条命令,服务器在执行命令期间,不会去执行其他客户端的命令请求。
事务中的多条命令被一次性发送给服务器,而不是一条一条地发送,这种方式被称为流水线,它可以减少客户端与服务器之间的网络通信次数从而提升性能。
Redis 事务的执行并不是原子性的。
Redis的事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。