文章目录
- 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服务设置成:守护进程
2.2 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集合可以进行 并、交、差集合运算
//添加集合元素: - 注意: 元素之间有间隔可同时增加多个元素
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数据无序,但根据每个值的分数属性,可进行排序
//添加元素: -- 注意:可同时添加多个元素、元素值重合则更新它的分数
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对象
添加属性:
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名