这次我们来说说我们的redis,在我们的redis的认知里,最熟悉的就是用redis作为缓存使用,还有我们的分布式session,其实还有很多redis的使用,还有redis的哨兵模式等等。

  Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。(百度百科)

安装(linux为例讲解)

  1.先安装一下C语言的包,redis的底层是用C来写的,如果不安装可能安装的时候会报错的。输入$ yum install gcc

  2.获得redis资源,输入 $ wget upload/201910161449038464.png" alt="" style="margin: 0px; padding: 0px; border: 0px; max-width: 680px; height: auto;" />

 官网有如何安装的教程这里就不在继续赘述了。

redis的数据结构:

   我们都知道redis是键值对的形式来存储数据的,其实内部还有几种结构的,也是我们常见常用的结构,这里来详细说一下。

 

 我们接下来会围绕这五种数据结构来展开去讲。

结构与常见命令场景

String常见操作

SET KEY VALUE //存入单个字符串键值对,最常见不过了,单值缓存,就不说啦。

MSET KEY VALUE//批量写入字符串,一般来存对象。看下实例

这里有一张职员表,内容如下

 只存了姓名和年龄两个字段,以前我们的方式都是设置一个key,然后把姓名和年龄转为json然后再存储对吧。

我们来看一下我们的MSet命令是如何使用并存储的。

mset user:1:name zhang user:1:age 1

也就是说我们一口气直接把user表内id为1的对象都存在了redis里,然后我们用mget user:1:name user:1:age。就可以一次性取出来了。

SETNX //存入一个不存在的字符串键值对,我们来看一下实例。最简单的分布式锁就看可以用他来实现。

复制代码
 127.0.0.1:6379> setnx lock:user true (integer) 1 127.0.0.1:6379> setnx lock:user true (integer) 0
复制代码

就是说只允许一次的写入,写入成功才会返回1,否则是0,我们的线程争抢就看谁优先写入啦。

GET KEY//取得一个键对应的字符串,上文提到过 ,不再赘述

MGET KEY//批量获得键对应的字符串,上文提到过 ,不再赘述

EXPIRE KEY SECONDS //设置一个键的过期时间,单位是秒

复制代码
127.0.0.1:6379> expire lock:user 1 (integer) 1 127.0.0.1:6379> get lock:user (nil)
复制代码

原子加减

INCR key //将key中存储的数字值加1,一般用在新闻点赞计数操作 incr {文章:id}

 

复制代码
127.0.0.1:6379> incr article:xiaocai   (integer) 1 127.0.0.1:6379> incr article:xiaocai   (integer) 2 127.0.0.1:6379> incr article:xiaocai   (integer) 3 127.0.0.1:6379> incr article:xiaocai   (integer) 4
复制代码

 

DECR key //将key中存储的数字值减1,一般用在新闻点赞计数操作

INCRBY KEY  increment //将key所存储的值加上increment

DECRBY key decrement //将key所存储的值减去decrement


&nb