Redis快速入门

101 阅读12分钟

Redis前置知识

Redis 是什么?

MySql数据库在磁盘当中,相较于主存,磁盘的访问速度太慢了,因此就有了一个中间件(在主存当中),它以键值对的形式存储MySql中的常用数据,其访问速度比直接访问MySql要快很多,这就是Redis (相当于计组当中的Cache与主存的关系)。

当要访问mysql数据库时,程序会先到Redis当中去访问,Redis当中没有,才到mysql中去访问,并将访问到的数据写入Redis中去 (下次访问该数据时就能直接在Redis中直接访问到)。

Redis(NoSql非关系型类型数据库) 如下: 1.PNG

因为Redis在内存当中,一旦断电,数据就全部丢失了,因此为了避免这种情况,Redis会定期的将数据自动写入磁盘,实现数据持久化。

Redis 下载与安装(windows 版)

  1. 通过以下地址 redis 5.0.14获取到redis的windows安装包。

2.PNG

  1. 下载完成后,点击安装包,进行安装

6.PNG

  1. 一路next,但注意以下两个部分

4.PNG

3.PNG

  1. 安装完成后,打开windows的cmd,进入你的redis安装地址,输入命令redis-server,结果如下图,则表明安装成功。

5.PNG

注意:上图表示redis服务已开始执行,若关闭该cmd,则redis服务停止。

  1. 若输入命令redis-server,结果如下图,则表示redis服务已经自启动了,此时可以打开任务管理器,找到redis服务强制关闭,然后在执行第4步操作。

7.PNG

  1. 开启redis服务后,打开一个新的cmd,输入命令redis-cil,即可进入redis对应的一个客户端,其可以通过各种redis命令来访问redis的服务端,而服务端就会根据客户端的命令来操作(增删改查)一块固定的主存空间即redis数据库

8.PNG

上图便是获取redis数据库当中的键"name"对应的值"yuan"(作者提前写入该键值对)

Redis 下载与安装(linux版)

以下使用的Linux为ubantu16.04

  1. 安装Redis服务

    输入命令 sudo apt-get install redis-server

image.png (作者已提前安装好)

  1. 检查Redis服务的系统进程

    输入命令 ps -agx|grep redis

image.png

  1. 通过启动命令检查Redis服务的状态

    输入命令 sudo /etc/init.d/redis-server status

image.png

  1. 通过命令行客户端访问Redis

下载安装Redis服务时,会自动安装Redis命令行服务程序,输入命令 redis-cli 即可通过客户端访问Redis服务(退出输入quit)

image.png

  1. 基本的Redis命令见本文下面的Redis常用指令

linux下修改Redis的配置

输入命令 sudo vi /etc/redis/redis.conf

5.PNG

6.PNG

默认情况下,Redis服务是不允许远程访问的,只允许本机访问,所以我们需要进入配置文件开启远程访问功能:

7.PNG 将上面红框中的bing 注释掉,即表明允许远程访问。

默认情况下,访问Redis是不需要密码的,但这样很不安全,因此我们需要为Redis服务设置访问密码:

8.PNG 如上图,在配置文件中找到requirepass,取消其注释,设置密码,格式:requirepass 密码(这里设置密码123456),当然也可以像我这样偷懒,直接随便找个地方将该命令直接手打上去(如上图红框)

配置完上面这些后,记得要重启Redis服务才能生效:

输入命令 sudo /etc/init.d/redis-server restart

9.PNG

为Redis访问设置完密码后,不输入密码就进行访问是不能执行命令的:

10.PNG

正确的登录方式应该是:

11.PNG

Redis常用命令

Redis当中是按键值对来进行存储的,键固定为字符串类型,但值的类型却不固定。值可以是字符串(String)类型,哈希(Hash)类型,数组(List)类型,集合(Set)类型,有序集合(Zset)类型共5种类型,根据这5种类型,可以将Redis命令分为5类。

针对键的相关操作

keys * //该指令作用是查看当前redis数据库当中的所有键名

keys * a * //该指令作用是查看当前redis数据库当中的所有的包含"a"的键名

keys a * //该指令作用是查看当前redis数据库当中的所有的以"a"开头的键名

keys * _1 //该指令作用是查看当前redis数据库当中的所有以"_1" 结尾的键名

exists 键名 //判断当前redis数据库当中是否存在该键名,存在返回1,不存在返回0

type 键名 //判断该键名对应的值的类型

del 键名1 键名2 键名3 //删除redis当中对应的键值对

ttl 键名 //查看当前键值对还有多少时间过期(单位s),返回剩余时间。

//-1表示该数据永不过期, -2 表示该数据已过期,查看一个不存在的数据,返回值就是-2

expire 键名 过期时间 //重新设置该键值对的过期时间

rename 旧键名 新键名 //为对应的键值对的键重命名

flushall //清空该redis数据库的所有键值对

redis 数据库的配置文件中,默认有0~15共16个数据库,默认操作的是0号数据库

select 数据库号数 //指令作用:切换数据库

字符串类型(最常用)

即值的类型是字符串。

set 键名 值 //其中这个值可以加引号,也可以不加,默认是字符串类型

//该命令作用是向redis数据库中插入一个新的字符串类型的键值对。 若该键已存在,则该命令会覆盖掉键对应的原来的值。

get 键名 //该命令作用是获取该键在redis数据库中对应的值

setnx 键名 值 //其中这个值可以加引号,也可以不加,默认是字符串类型

//其与上面的set命令区别在于该命令插入的值不可覆盖(即不可修改),该命令设置成功返回(integer) 1,失败返回(integer) 0。

setex 键名 过期时间 值 //其中这个值可以加引号,也可以不加,默认是字符串类型

//该命令与上面的set的区别在于,当该键值对在redis数据库当中的存在时间超过了过期时间(单位s),redis就会自动将该键值对清除掉。

mset 键名1 值1 键名2 值2 //批量设置键值对,键值对一一对应,可以同时设置多个键值对

mget 键名1 键名2 键名3 //批量查询多个键各自对应的值,并一一对应返回

append 键名 拼接的值 //在键对应的值后面进行拼接

append 键名 " " //拼接空格

incr 键名 //该指令作用是将键名对应的值自动+1,要求键名对应的值必须是字符串整数

decr 键名 //该指令作用是将键名对应的值自动-1,要求键名对应的值必须是字符串整数

incrby 键名 数字k //该指令作用是将键名对应的值自动+k,要求键名对应的值必须是字符串整数

decrby 键名 数字k //该指令作用是将键名对应的值自动-k,要求键名对应的值必须是字符串整数

strlen 键名 //获取键名对应的字符串(值)的长度

字符比特流操作

针对一个字符比特位(8bit)进行的操作。

setbit 键名 偏移量 值 //该指令作用是设置键名对应的值的一个比特位上的值,未设置的比特位默认为0。

//偏移量是从左往右开始算的(从高位到低位),下标为0~7

//值为对应比特位上的值(只能是1或0)

setbit mybit 6 1 //该指令相当于设置键值对 mybit:00000010(十进制为2)

getbit 键名 偏移量 值 //该指令作用是获取键名对应的值的一个比特位上的值

bitcount 键名 //该指令作用是计算该键名的8个bit位共有多少位的值被设置为1

bitpos 键名 要查找的值p //返回该键对应的值的8个bit位中p第一次出现的位置(从左往右算,位置下标0~7)

数组类型

该类型当中的子元素必须都是字符串类型(string),且允许有重复元素

键名:[值1,值2,值3]

lpush 键名 值1 值2 值3 值4 //创建一个数组类型的键值对,并且其值依次从左插入

rpush 键名 值1 值2 值3 值4 //创建一个数组类型的键值对,并且其值依次从右插入

linsert 键名 after 值1 值2 //从左向右找,将值2插入到值1第一次出现的位置后面(值1已存在在键名对应的数组当中)

linsert 键名 before 值1 值2 //从左向右找,将值2插入到值1第一次出现的位置的前面(值1已存在在键名对应的数组当中)

lindex 键名 下标 //从左向右找,查找到键名对应的数组的对应下标的元素

lrange 键名 开始下标 结束下标 //从左向右找,遍历到键名对应的数组的对应下标之间的元素(包括起始下标的元素)

llen 键名 //获取键名对应的数组(值)的长度

lrem 键名 count 值k //删除键名对应的数组对应的值k

//当count=0时,删除数组中所有的k值,当count>0时,删除从左向右数,前count个k值,当count<0时,删除从右向左数,前count个k值

lset 键名 下标 值 //修改键名对应数组的对应下标的值

lpop 键名 //从左往右,删除键名对应数组的第一个元素

rpop 键名 //从右往左,删除键名对应数组的第一个元素

在实际开发中,常用 rpush,lpop来实现一个队列数据结构

哈希类型

该类型的键值对对应的值又是一组键值对,即字典套字典(map套map)

hset 键名 字段名1 值1 字段名2 值2 字段名3 值3 //设置一个hash类型的键值对

键名:{
    字段名1:值1,
    字段名2:值2,
    字段名3:值3,
}

hget 键名 字段名1 //获取键名对应的一个字段名对应的值

hgetall 键名 //获取该键名下的所有字段和对应的值

//hgetall返回结果:
字段名1
值1
字段名2
值2
字段名3
值3

hmget 键名 字段名1 字段名2 字段名3 //依次获取字段名1,字段名2,字段名3的值

hvals 键名 //获取该键名下的所有字段的所有的值(不要对应的字段)

hkeys 键名 //获取该键名下的所有字段(不要各自对应的值)

hdel 键名 字段名 //删除该键名下的对应字段

hexists 键名 字段名 //判断当前键名下是否存在该字段名,存在返回1,不存在返回0

hincr 键名 字段名 //该指令作用是将键名对应的字段名的值自动+1,要求键名对应的值必须是字符串整数

hdecr 键名 字段名 //该指令作用是将键名对应的字段名的值自动-1,要求键名对应的值必须是字符串整数

hincrby 键名 字段名 数字k //该指令作用是将键名对应的字段名的值自动+k,要求键名对应的值必须是字符串整数

hdecrby 键名 字段名 数字k //该指令作用是将键名对应的字段名的值自动-k,要求键名对应的值必须是字符串整数

集合类型

集合类型的特点是去重和无序。

sadd 键名 值1 值2 值3 //设置一个集合类型的键值对

键名:{值1,值2,值3}

smembers 键名 //获取该键名对应的整个集合

scard 键名 //获取该键名对应的集合中的元素个数

spop 键名 [count=k] //随机删除键名对应的集合的k个元素,后面count是可选参数,默认删一个

srem 键名 值 //删除该键名对应集合的指定的值

sinter 键名1 键名2 //获取键名1和键名2各自对应的集合的交集

sunion 键名1 键名2 //获取键名1和键名2各自对应的集合的并集

sdiff 键名1 键名2 //获取键名1和键名2各自对应的集合的差集(键名1-键名2)

有序集合类型

有序集合(Zset),其内部的元素去重且根据score权重值(权重值必须是数字)来进行排序,从小到大排序。

zadd 键名 权重值1 值1 权重值2 值2 权重值3 值3
//设置一个有序集合类型的键值对,集合内的元素顺序根据各自对应的权重值自动排序,从小到大排序

zrangbyscore 键名 权重值1 权重值2 //获取权重值1与权重值2之间的所有元素,并将它们按从小到大的顺序排列输出

zrevrangbyscore 键名 权重值2权重值1 //获取权重值1与权重值2之间的所有元素,并将它们按从大到小的顺序排列输出

zrange 键名 开始下标 结束下标 //从低到高获取集合当中开始下标与结束下标之间的所有元素(集合元素已自动根据权重值排序好)

zrevrange 键名 开始下标 结束下标 //从高到低获取集合当中开始下标与结束下标之间的所有元素

zcard 键名 //获取有序集合长度

zscore 键名 值 //获取该键对应的有序集合下的制定值的权重值

zrank 键名 值 //获取对应值在有序集合中的排名(从小到大的排名,即排在第几)

zrevrank 键名 值 //获取对应值在有序集合中的排名(从大到小排序)

zcount 键名 权重1 权重2 //获取权重值1与权重值2之间的元素个数

zincrby 键名 数字k 值//对有序集合下的该值的权重值进行加k

zrem 键名 值1 值2 值3 //删除有序集合下的各个值

zpopmin 键名 count //从最低权重值删除共count个元素

zpopmax 键名 count //从最高权重值删除共count个元素