深入浅出的Redis

什么是Redis?

说到Redis想必大家即使没有使用过必然都有所耳闻。Redis是一个完全开源免费,遵守BSD协议,高性能的key-value数据库。
Redis为什么会这么受欢迎呢?这一切都益于Redis具有以下一些优点:
1.数据以key-value的形式保存在内存中,具有高效的读写功能
2.丰富的数据类型,如string, list, set, sorted set, hash等数据结构。
3.支持事物,包括原子性,一致性,隔离性,耐久性
4.支持数据持久化,包括RDM和AOF两种持久化方式
5.支持主从复制,主机可以自动将数据同步到从机,并且还可以实现读写分离
Redis具有这么多的优点,想必大家已经迫不及待的想要了解Redis,接下来笔者将带领大家一起学习。

Redis下载及安装(window)

下载地址:https://github.com/MSOpenTech/redis/releases
Redis支持32和64位。这个需要根据自己系统平台的实际情况选择。
笔者在这里下载的是Redis-x64-3.2.100.zip。

在这里插入图片描述
下载完成之后,将文件重名为redis。
打开一个cmd窗口,切入到E:\redis目录,输入redis-server.exe redis.windows.conf。然后出现如下界面:
在这里插入图片描述
出现这个界面表明我们成功启动redis的服务端。这时候再打开一个cmd窗口(注意:不要关闭原来已打开的窗口),再次切换到E:\redis,输入redis-cli.exe -h 127.0.0.1 -p 6379。此时,会打开如下界面:
在这里插入图片描述
恭喜您,这个时候你已成功启动redis的服务端和客户端。

redis数据类型详解

Redis目前主要支持的数据结构有五种,分别是String, List, Set, ZSet, Hash. 接下来笔者将为大家介绍它们一些常用的方法。

String数据类型

String是Redis常用的数据类型,它的值可以是字符串,整型或者浮点类数。
1.常用命令:
set(key, value) //给key设定一个值value
get(key)//通过键key获取值value
del(key)//删除键key
incr(key)//给值value加1
decr(key)//给值value减1
在这里插入图片描述
2.适用场景:

  • 限速:处于安全考虑,每次进行登录时让用户输入手机验证码,为了短信接口不被频繁访问,会限制用户每分钟获取验证码的频率。
  • 共享session:出于负载均衡的考虑,分布式服务会将用户信息的访问均衡到不同服务器上,用户刷新一次访问可能会需要重新登录,为避免这个问题可以用redis将用户session集中管理,在这种模式下只要保证redis的高可用和扩展性的,每次获取用户更新或查询登录信息都直接从redis中集中获取。
  • 计数器:许多运用都会使用redis作为计数的基础工具,他可以实现快速计数、查询缓存的功能,同时数据可以一步落地到其他的数据源。如:视频播放数系统就是使用redis作为视频播放数计数的基础组件。
Hash数据类型

1.常用命令:
hset(String key, String field, String value);//向名称为key的hash中添加元素field<—>value
hincrby(String key, String field, long value)//将名称为key的hash中field的value增加value
hvals(String key)//返回名称为key的hash中所有键对应的value
hdel(String key, String… fields)//删除名称为key的hash中键为field的域
在这里插入图片描述
2.使用场景:

  • 使用场景:哈希结构相对于字符串序列化缓存信息更加直观,并且在更新操作上更加便捷。所以常常用于用户信息等管理。
List数据类型

1.常用命令
rpush(String key, String… values)//在list尾部添加元素
lpush(String key, String… values)//在list头部添加元素
llen(String key)//返回名称为key的list的长度
lrange(String key, Long start, Long end)//返回名称为key的list中start至end之间的元素(下标从0开始)
lindex(String key, Long index)//返回名称为key的list中index位置的元素
lpop(String key)//返回并删除名称为key的list中的首元素
rpop(String key)//返回并删除名称为key的list中的尾元素
在这里插入图片描述
2.适用场景:

  • 消息队列:
    redis的lpush+brpop命令组合即可实现阻塞队列,生产者客户端是用lupsh从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞时的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡和高可用性
  • 文章列表:每个用户都有属于自己的文章列表,现在需要分页展示文章列表,此时可以考虑使用列表,列表不但有序,同时支持按照索引范围获取元素。
Set数据类型

1.常用命令
sadd(String key, String… members)//向名称为key的set中添加元素members
srem(String key, String… members)删除名称为key的set中的元素member
spop(String key)//随机返回并删除名称为key的set中一个元素
sinter(String… keys)//求交集
sunion(String… keys)//求并集
sdiff(String… keys)//求差集
smembers(String key)//返回名称为key的set的所有元素
srandmember(String key)// 随机返回名称为key的set的一个元素
在这里插入图片描述
2.适用场景:

  • 标签(tag):集合类型比较典型的使用场景,如一个用户对娱乐、体育比较感兴趣,另一个可能对新闻感兴趣,这些兴趣就是标签,有了这些数据就可以得到同一标签的人,以及用户的共同爱好的标签,这些数据对于用户体验以及曾强用户粘度比较重要。(用户和标签的关系维护应该放在一个事物内执行,防止部分命令失败造成数据不一致)
ZSet数据类型

1.常用命令:
zadd(String key, double score, String member)//向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。
zrem(String key, String… member)//删除名称为key的zset中的元素member
zincrby(String key, double score, String member)//如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment
zrank(String key, String member)//返回名称为key的zset(元素已按score从小到大排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”
zrevrank(String key, String member)//返回名称为key的zset(元素已按score从大到小排序)中member元素的rank(即index,从0开始),若没有member元素,返回“ni;”
zscore(String key, String element)//返回名称为key的zset中元素element的score
在这里插入图片描述
2.适用场景:

  • 排行榜:有序集合经典使用场景。例如视频网站需要对用户上传的视频做排行榜,榜单维护可能是多方面:按照时间、按照播放量、按照获得的赞数等。

总结及回顾

笔者通过本文主要给大家介绍了redis的下载及安装,以及redis几种数据结构常用的命令。建议大家按照本文的步骤动手试一下,肯定会有新的收获。如果遇到不懂问题,可以联系笔者一起探讨。最后祝大家学习开心,生活愉快!

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值