文章目录

  • 1. 概述
  • 2. 安装
  • 2.1 Linux
  • 2.2 Redis配置文件
  • 3. Redis客户端 - 操纵数据库
  • 3.1 前期准备
  • 3.2 命令
  • 3.2.1 数据库操纵
  • 3.2.2 键值对操纵 - value数据类型
  • 3.2.2.1 单字符串
  • 3.2.2.2 Set - 多个字符串
  • 3.2.2.2 sortedSet - 多个字符串,但每个字符串具有分数属性score
  • 3.2.2.3 List双向链表 - 存储多个字符串
  • 3.2.2.4 HashMap - 存储的是键值对Map对象


1. 概述

Redis:本质上是一个键值模型(key-value)的内存数据库( 巨大Map ),整个数据库加载在内存中进行数据操作,并定期通过异步操作把数据库数据写回到硬盘上进行保存。






Redis优势

性能高。每秒能处理10万次以上的读写操作 - 整个数据库在内存中进行操纵

数据可以持久化到硬盘上

存储的数据类型丰富

支持事务








Redis适用场景

缓存应用

分布式集群session管理

取最新N个数据的操作

排行榜应用

网站访问统计

任务队列


2. 安装

2.1 Linux








1. Window上随便一个网址下载个Linux版的Redis压缩包,然后传给Linux系统

2. 解压文件到当前目录:tax xzf redis压缩包名

3. 进入解压后的目录:cd redis解压目录名

4. redis安装到指定目录下:make PREFIX=/usr/local/redis install

5. c步骤目录内redis.conf复制一份给4安装目录:cp redis.conf /usr/local/redis

6. 启动Redis( 到安装目录内) :./bin/redis-server ./redis.conf

7. 退出Redis:快捷键Ctril + C


出现这个说明Redis服务启动成功 - Redis服务设置成:未守护进程

redis数据库的备份路径在哪里_配置文件


出现这个说明Redis服务启动成功 - Redis服务设置成:守护进程

redis数据库的备份路径在哪里_redis数据库的备份路径在哪里_02

2.2 Redis配置文件

Redis配置文件讲解

1. Redis服务变守护进程daemonize: daemonize yes

2. 用户访问bind: 默认本地ip,只能本机客户端访问Redis,如果不设置的话,任何ip,即任何人都可访问

3. Redis运行端口号Port: 默认6379。开启多个Redis服务时,需要修改端口号

4. 无操作关闭时间timeout: 客户端n秒内无任何命令操作则自动关闭客户端的连接。默认设置0,表不关闭

5. 周期性检测时间tcp-keepalive: 使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是300s,如果设置为0,则不会周期性的检测。

6. 配置PID文件路径pidfile: 当redis作为守护进程运行的时候,它会把 pid 默认写到
/var/redis/run/redis_6379.pid 文件里面

7. 日志级别loglevel: debug(大量日志信息,开发环境)、varbase(较多日志信息)、notice(默认,生产环境)、warning(记录关键信息)

8. 设置数据库的数目databases: 默认16,且从0开始


3. Redis客户端 - 操纵数据库

3.1 前期准备





Redis默认

每个数据库有默认的id号,默认从0开始

使用select选择对应id号的数据库

redis默认开始就创建16个数据库,可从配置文件中修改这个数据库数量





客户端命令

开启客户端进程并进入:./bin/redis-cli

退出客户端返回到Linux命令行:quit

关闭客户端进程:bin/redis-cli shutdown


3.2 命令
3.2.1 数据库操纵
// 删除当前数据库的所有key
flushdb


// 删除所有数据库的所有key:
flashall

// 选择数据库(默认有16个数据库 - 默认0):
select 序号
3.2.2 键值对操纵 - value数据类型

下列是针对Vaue来区别数据类型

3.2.2.1 单字符串
//设置键值对
set <key> <value>   

//获取键值
get <key>       

//获取key为name的valeu的长度
strlen <key>  

//返回key对应value的一个子字符串,位置从X到Y - 注意:[X,Y] - 是闭合区间
getrange <key> x y 


//判断键是否存在:
exists <key>

//获取所有键名:
keys *

//删除键值对
del <key>

//设置key的过期时间:
expire key 秒数 

//设置key不过期(默认):
persist key



------------------<value>是数值的操作------
//给key对应的value追加值,若key不存在,相当于set一个新的值
append <key> <value>   

 //对指定key的value进行加1;场景:数据主键
incr <key>


//对指定key的value进行加value;
incrby <key> <value> 

 //value减1
decr <key>       

//减value
decrby <key> <value> 

删除指定key
del <key>
3.2.2.2 Set - 多个字符串

1. Value:多个String字符串无序不重复集合

2. 多个set集合可以进行 并、交、差集合运算

redis数据库的备份路径在哪里_概述_03

//添加集合元素: - 注意: 元素之间有间隔可同时增加多个元素
Sadd 集合名  元素    

//显示集合元素: 
smembers 集合名

//随机显示指定个数的集合元素:
srandmember 集合名 元素个数

//删除元素:-- 注意:元素之间间隔可同时删除多个元素
srem 集合名 元素    

//随机删除一个元素:
spop 集合名

//获取第一个集合与第二个集合的差集:
sdiff 集合名1 集合名2


//将第二个集合与第三个集合的差集存到第一个集合:
sdiffstore 集合名1 集合名2 集合名3


//获取集合1与集合2的交集:
sinter 集合1 集合2


//将集合2、3之间的交集存到另一个集合1中: 
sinterstore 集合1 集合2 集合3


//获取并集:
sunion 集合1 集合2


//将集合2,3并集存到集合1中:
sunionstore 集合1 集合2 集合3


//获取集合的元素个数:
scard 集合

Set集合的应用 - 随机好友推荐向p1

// 将p2、p3、p4这3个字符串 给 p1:friends集合
Sadd p1:friends  p2 p3 p4

Sadd p2:friends  p1 p3 p5 p4

Sadd p3:friends  p1 p6 p7 p8

//将p2:friends p3:friends这两个集合进行合并,并赋值给temp1-union 集合
sunionstore temp1-union p2:friends p3:friends

//temp1-union p1:friends这两个集合进行差值运行,并赋值给temp2-diff 
sdiffstore temp2-diff temp1-union p1:friends

// 将temp2-diff 集合中的p1字符串删掉
srem temp2-diff p1

// 显示该集合所有的 字符串
smembers temp2-diff

// 随机显示一个集合内的元素
srandmember temp2-diff 2

3.2.2.2 sortedSet - 多个字符串,但每个字符串具有分数属性score

Set数据无序,但根据每个值的分数属性,可进行排序

redis数据库的备份路径在哪里_redis数据库的备份路径在哪里_04

//添加元素: -- 注意:可同时添加多个元素、元素值重合则更新它的分数
zadd 集合名 元素分数 元素 


//给元素的分数加分:
zincrby sset 增加的分数 元素

//返回某个元素根据分数在集合的排名(从小到大,0开始起):
zrank 集合 元素


//返回某个元素根据分数在集合的排名(从大到小,0开始起):
zrevrank 集合 元素


//返回集合全部元素(从小到大):
zrange 集合 0 -1


//返回集合全部元素(从大到小):
zrevrange 集合 0 -1


//获取符合指定范围的分数的元素(双闭区间):
zrangeByscore 集合 分数小 分数大


//获取符合指定范围分数的元素个数(双闭区间):
zcount 集合 分数小  分数大


//返回集合的元素个数:
zcard 集合


//返回元素对应的得分:
zscore 集合 元素


//删除对应排名范围的元素:
zremrangeByrank 集合  排位小 排位大


//删除对应分数范围的元素:
zremrangeByScore 集合 分数小  分数大

3.2.2.3 List双向链表 - 存储多个字符串
//尾部添加
rpush key value  


//头部添加
lpush  key value 


//查看双向链表的数据。start、stop即使索引范围, stop等于-1时,即是最后一个元素索引
lrange key start stop 


//返回key对应valeu的元素个数
llen key  


//从头部弹出元素
lpop key  


//从尾部弹出元素
rpop key  


//该双向链表只保存[start,stop]范围索引的元素
ltrim key start stop

3.2.2.4 HashMap - 存储的是键值对Map对象

redis数据库的备份路径在哪里_redis数据库的备份路径在哪里_05

添加属性:
hset Map名 属性名  属性值


获取某个集合的属性值:
hget Map名 属性名


同时添加多个属性:
hmset Map名 属性名 属性值 属性名 属性值


同时获取某个集合多个属性名的值:
hmget Map名 属性名1 属性名2


返回Map有多少个键值对
hlen Map名


删除Map中的某个键值对
hdel Map名  Map中的键名


返回Map中所有键名
hkeys Map名


返回Map中所有值-不包括键名
hvals Map名


返回Map中所有键值对
hgetall Map名