1 前言
最近在实习的时候leader让配合工程的老哥将数据导入到Redis,虽然不是第一次听到Redis这个词,但这次距离Redis还是非常的近,于是网上搜索了一些关于Redis的资料,大概过了一遍Redis的菜鸟教程(不得不说这个教程真的超强,各种技术栈的教程都有),然后亲自动手去倒腾了一番Redis,下面记录一些学习的心得体会~
2 什么是Redis?
2.1 定义
Redis就是一个键值对数据库!让我们来看看维基百科的定义:
Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。从2015年6月开始,Redis的开发由Redis Labs赞助,而2013年5月至2015年6月期间,其开发由Pivotal赞助。[3]在2013年5月之前,其开发由VMware赞助。[4][5]根据月度排行网站DB-Engines.com的数据,Redis是最流行的键值对存储数据库。[6]
从上面的介绍我们就可以看到Redis的特性:
- 开源
- 支持网络
- 基于内存
- 可选持久性的键值对,也就是说k-v对可以设置过期时间!是不是很方便?
那Redis什么时候发布第一个版本的呢?10年前!也就是2009年发布了第一个版本~
2.2 为什么要用Redis?
咦,大家肯定会问,已经有MySQL这样的数据库了,为什么还要Redis呢?
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
- 储存在Redis中的数据是持久化的。断电或重启后,数据也不会丢失。因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化。
2.3 Redis应用场景
- Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。
举例:
- 比如a网站首页一天有100万人访问,其中有一个板块为推荐新闻。要是直接从数据库查询,那么一天就要多消耗100万次数据库请求。上面已经说过,Redis支持丰富的数据类型,所以这完全可以用Redis来完成,将这种热点数据存到Redis(内存)中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。
- 比如用户进入vivo手机的应用商店,vivo希望给每位用户推荐不同的app,这时候很多人一起访问的时候就需要快速出结果,Redis就非常适合!
3 如何在Linux环境安装Redis?
3.1 为什么要在Linux环境安装Redis客户端?
- 可以直接连接Redis数据库,进行数据查询等
3.2 如何安装?
详情方法见文章最后的参考,亲测有效!
4 Redis相关命令
可以参考:
4.1 查看所有的keys
keys *
- 但一般数据量很大的时候不建议这么搞,容易崩掉~
4.2 得到Key对应Value的值
get keyname
4.3 随机得到一个key
Randomkey
4.4 设置一个key-value
set keyname value
4.5 连接Redis
./redis-cli -h ip地址 -p 端口
4.6 如何在linux中进入redis?
# 输入路径
cd /usr/local/redis-2.8.17/src
# 连接
./redis-cli -h ip地址 -p 端口
4.7 查看redis总共有多少key
DBSIZE
4.8 查看某个key对应的类型
type keyname
4.9 查看有多少的内存 已经使用了多少的内存
info
- 主要看两项:used_memory_human 和 maxmemory_human
5 如何导入数据到Redis?
【待补充】
6 Redis数据类型及适用场合?
关于每种类型的具体用法可以参考博文
1、string
- 应用:商品编号、订单号采用string的递增数字特性生成。
2、list
- 按照插入顺序排序的字符串链表。可以在链表的两头插入或删除元素,List中可以包含的最大元素数量是4294967295。
- 通过双向链表实现。 所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。
- 应用: 创建商品评论列表。
- 用户发布商品评论,将评论信息转成json存储到list中。
- 用户在页面查询评论列表,从redis中取出json数据展示到页面。
3、hash类型
- Hash类型可以看成具有StringKey和StringValue的map容器。非常适合于存储值对象的信息。如Username、Password和Age等。
- 比如下面的数据结构,我们希望更新某一个字段的信息的时候使用hash类型:
- 应用:存储商品信息。而商品信息包括:商品id、商品名称、商品描述、商品库存、商品好评
4、set类型
- 操作时间复杂度伟O(1)
- set类型可以看作没有排序的字符集合,无重复元素
5、sortedset类型
- 不允许重复元素,且每一个成员都会有一个分数(score)与之关联,用分数来进行排序,分数可以重复
- 在集合类型的基础上有序集合类型为集合中的每个元素都关联一个分数
- 操作: 能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作
- 应用:商品销售排行榜。根据商品销售量对商品进行排行显示,定义sorted set集合,商品销售量为元素的分数。
其中sortedset和list的对比:
- 实现方式不同。list实现方式为双向链表,两端速度读取快,n增大,中间数据读取慢;sortedset通过散列表实现,中间数据读取也很快
- 是否可以调整某个元素位置。sortedset可以通过调整分数实现,而list不可以
- 消耗内存不一样。sortedset比list更消耗内存
参考
- Redis维基百科:https://zh.wikipedia.org/wiki/Redis
- https://blog.csdn.net/qq_29846663/article/details/68066953
- Redis菜鸟教程:https://www.runoob.com/redis/redis-tutorial.html
- Linux环境安装Redis教程:https://blog.csdn.net/zhangxing52077/article/details/72866226