一.Redis概述
1.1 Redis简介
Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息
中间件。
官网:Redis - The Real-time Data Platform
中文网:Redis中文网
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据
是可以达到10万+的QPS(Queries-per-second每秒内查询次数)。它存储的value
类型比较丰富,也被称为结构化的NoSql数据库
NoSql(Not Only SQL),不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不
是要取代关系型数据库,而是关系型数据库的补充。
1.2 Redis特点
Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广
泛的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远
程字典服务」。
基于内存存储,读写性能高
适合存储热点数据(热点商品、资讯、新闻)
二.Redis下载与安装
2.1 Redis下载
Redis安装包分为windows版和Linux版:
Windows版下载:Releases · microsoftarchive/redis · GitHub
Linux版下载:Index of /releases/
Redis官网只提供了linux版本,没有windows版本。windows版本由微软公司开发,
不稳定,实际开发中我们一般都是使用linux版本。
2.2 在Linux中安装Redis
先查看下是否安装了gcc-c++
redis是C语言开发,安装redis需要先将官网下载的源码进行编译,编译依赖gcc环
境。如果没有gcc环境,需要安装gcc。
rpm -q gcc-c++ |
如果出现如上所示说明已经安装了。如果没有安装则执行下面命令进行安装即可。
yum -y install gcc-c++ |
上传"redis-4.0.0.tar.gz"到Linux系统/soft目录下
解压"redis-4.0.0.tar.gz"
进入到/usr/local目录,会出现redis-4.0.0目录
进入redis-4.0.0目录,使用make命令对上述源码在c语言的环境下进行编译redis
。make会调用gcc-c++编译redis源码,只有编译之后才可以进行安装。
在redis-4.0.0目录中,使用以下命令,将redis安装到/usr/local/redis指定的目录下
make PREFIX=/usr/local/redis install |
安装成功后在/usr/local/redis/bin目录下可以看到如下结构.
复制redis.conf配置文件到/usr/local/redis/bin
说明:要从刚解压的目录下复制过来。
redis-server: | Redis服务启动脚本 |
redis-cli: | Redis客户端脚本 |
redis.conf: | Redis配置文件 |
2.3 Linux系统中启动Redis服务
2.3.1 前端模式启动
直接运行bin/redis-server以前端模式启动,前端模式启动的缺点是启动完成后,不
能再进行其他操作,如果要操作必须使用ctrl+c,同时redis-server程序结束,不推荐
使用此方法。使用CTRL+ C 停止前端模式
./redis-server |
启动完可以看到不能再去写命令了这样显然是不方便的所以就有后端模式启动
2.3.2 后端模式启动
修改redis.conf配置文件,修改为daemonize yes 以后端模式启动
启动时,指定配置文件
查看启动的后台进程
2.3.3 redis启动客户端
进入redis/bin目录,启动"redis-cli"
./redis-cli |
退出客户端
2.3.4 停止redis服务
在Redis客户端里面输入shutdown
停止进程
2.4 可视化工具连接redis服务器端
通过命令行可以连接redis数据库服务器,但是在命令行中操作redis稍微麻烦一些。
我们平时可以使用可视化工具操作redis服务器。
2.4.1 可视化工具的安装
百度网盘:百度网盘 请输入提取码 提取码:v727
欢迎页面
软件的许可协议,接受即可
选择安装的位置
复制文件
完成安装
2.4.2 客户化工具的使用
打开可视化工具,创建链接:
打开防火墙
我们发现使用可视化工具连接linux的redis服务器,会报错。如需远程连接redis,需
配置redis端口6379在Linux防火墙中开放
#开放的端口永久保存到防火墙
|
修改配置允许其它机器访问
默认redis只允许本机访问,如果想要其它机器访问,需要编辑redis.conf配置内
容如下,添加当前Linux局域网的IP地址。
bind 127.0.0.1 192.168.18.128
|
在Windows下使用Redis客户端访问Linux服务器上的Redis服务器
*redis默认含有16个数据库。默认使用第一个数据库。我们可以在连接java0807
上右键进行命令行操作redis数据库。
说明:一个Redis服务器可以包括多个数据库,客户端可以只连接Redis中某个数据
库,就好比一个mysql服务器中创建多个数据库,客户端连接时指定连接到哪个数据
库。 Redis中有db0-db15编号的16个数据库。我们不能创建新的数据库,也不能删
除数据库。数据库中也没有表的结构,客户端默认连接第0个数据库。
三.Redis的数据类型
3.1 数据类型介绍
redis是一种高级的key-value的存储系统,键是string类型,其中value支持五种数据
类型,对于键和值的描述如下所示:
键(key):
键不能重复
作用:标识存储的数据
数据类型:string
命名规则:
不能太长:因为查询的效率低,查询起来不方便
不能太短:容易重复,同时可读性也差
按照规范:HEIMA_STU_LIST
值(value):支持5种数据类型
3.2 string类型的操作命令
字符串类型是Redis中最为基础的数据存储类型,它在Redis中以二进制保存。无论存
入的是字符串、整数、浮点类型都会以字符串写入。
在Redis中字符串类型的值最多可以容纳的数据长度是512M,这是以后最常用的数据
类型。
更多命令可以参考Redis中文网:Redis中文网
补充:批量操作: 批量添加:mset name lisi addr sh 批量查找:mget name age addr 批量删除:del name age |
命令演示
添加一个键为name,值为zhangsan
再设置一个键为age,值为23
得到name和age的值
删除name
批量添加name lisi addr sh
批量获取name age addr的值
批量删除name age
修改addr的值为bj
设置name2值为lisi,且存活5s,5秒后,内存销毁
也可通过set实现过期机制,ex 10表示存活10秒,例如设置name3值为
zhaoliu,且存活5s,5秒后,内存销毁
使用set命令添加name4并赋值为wangwu,然后使用EXPIRE 设置过期时间。
如果键存在则不保存,不存在则保存。
执行效果
3.3 hash类型的操作命令
Redis中的Hash类型可以看成是键和值都是String类型的Map容器,每一个Hash可以
存储4G个键值对。
该类型非常适合于存储对象的信息。如一个用户有姓名,密码,年龄等信息,则可以
有username、password和age等键。它的存储结构如下:
常用命令
命令演示
创建hash类型的键为person,并且添加一个字段为name,值为zhangsan
向person中添加字段为age,值为13
向person中批量添加字段为addr,值为sh;字段为company,值为xm
分别得到person中的name、age的字段值
批量得到person中的name、age和addr的字段值
获取person中所有的字段以及对应的值
获取person中所有的字段
获取person中所有的值
删除person中的name
批量删除person中的age、addr以及company
3.4 list类型的操作命令
在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一
样,我们可以在其左部(left)和右部(right)添加新的元素。在插入时,如果该键并不存
在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移
除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4G个。
常用命令
命令演示
向mylist键的列表中,从左边添加a b c三个元素
从右边添加one two three三个元素
查询索引0到2的数据
查询所有的元素
查询索引是2的数据
从右边添加一个重复的元素three
删除最左边的元素c
删除最右边的元素three
获取列表中元素的个数
向列表list1中添加数据,并移除列表中最后一个元素,如果列表中没有该元素则
等待指定时间
向列表list1中添加元素: a b c b b. 然后删除2个b元素
3.5 set类型的操作命令
在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们
也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。Set可
包含的最大元素数量是4G,和List类型不同的是,Set集合中不允许出现重复的元
素。
常用命令;
命令演示;
向myset集合中添加A B C 1 2 3 六个元素
再向myset中添加B元素,看能否添加成功
显示所有的成员,发现与添加的元素顺序不同,元素是无序的
删除其中的C这个元素,再查看结果
判断A是否在myset集合中
判断D是否在myset集合中
向两个集合中添加数据,查看两个集合的
补充: SDIFF key1 [key2 ...] :返回指定集合的差 |
3.6 zset/sorted set类型的操作命令
Redis 有序集合(sorted set)和set集合一样也是无序不可以重复。不同的是每个元
素都会关联一个分数(排序因子)。
redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复,每个集合可存储40多亿个成
员。
常用命令
命令演示:
添加键country,分数是10,值是Japan
添加键country,分数是5,值是USA,添加键country,分数是50,值是Russia
添加键country,分数是1,值是China,分数是120,值是Korea
查询country中所有的元素
查询所有的元素和对应的分数
按照分数倒叙获取所有的元素和对应的分数
查询索引是0 到 1的值
查询Japan的索引号(从0开始)
删除值为USA的元素
查询country中还有多少个元素
显示Russia的分数
3.7 Redis的通用命令
命令演示:
添加字符串name的值为zhangsan, myset 的值为20
显示所有的键
显示所有以my开头的键
显示所有my后面有三个字符的键
添加一个字符串:name2 lisi
添加一个list:name3 a b c d
显示所有的键
一次删除name2和name3这两个键,其中name2和name3是不同的类型,显示所有键
分别判断name和name2是否存在
分别判断name user myset mylist分别是什么类型
切换数据库到15,向15中添加一个name2 wangwu,得到name2的值显示。
将15中的name2移到0中
切换到数据库0,显示所有的键
返回给定 key 的剩余生存时间(TTL, time to live),以秒为单