目录
一、Redis概述
1.1 Redis介绍
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
- 字符串类型
- 散列类型(map)
- 列表类型
- 集合类型
- 有序集合类型
1.2 Redis应用场景
- 缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
- 分布式集群架构中的session分离。
- 聊天室的在线好友列表。
- 任务队列。(秒杀、抢购、12306等等)
- 应用排行榜。
- 网站访问统计。
- 数据过期处理(可以精确到毫秒)
1.3 Redis的特性
- redis数据访问速度快(数据在内存中)
- redis有数据持久化机制(持久化机制有两种:1、定期将内存数据dump到磁盘;2、aof(append only file)持久化机制——用记日志的方式记录每一条数据更新操作,一旦出现灾难事件,可以通过日志重放来恢复整个数据库)
- redis支持集群模式(容量可以线性扩展)
- redis相比其他缓存工具(ehcache/memcached),有一个鲜明的优势:支持丰富的数据结构
二、Redis安装
2.1 下载Redis
下载地址:Download | Redis
源码包下载地址:Redis · GitHub
官方地址:Redis
2.2 Redis安装环境
Redis安装一般会在Linux系统下进行安装,又因为redis是使用c语言开发,所以需要c语言环境。
- Linux:CentOS-7.7
- VMware:15.5
- C语言环境
2.3 Redis安装
第一步:在VMware中安装CentOS系统(Linux)。
第二步:在Linux系统中安装c语言环境
# 测试服务器是否有网
[root@user1 ~]# ping www.baidu.com
# 安装C语言环境
[root@user1 ~]# yum -y install gcc-c++
第三步:将redis的源码包通过MobaXterm_CHS上传至/root/softwares 下通过命令将压缩包接到usr/local
tar -zxvf /root/softwares/redis-4.0.14.tar.gz -C /usr/local
第四步:编译源码包
# 进入目录
[root@user1 ~]# cd /usr/local/redis-4.0.14/#编译源码包
[root@user1 redis-4.0.14]# make
......
Hint: It's a good idea to run 'make test' ;)make[1]: Leaving directory `/usr/local/redis-4.0.14/src'
2.4 Redis启动
2.4.1 前端启动
注意:前端启动后,如果客户端关掉或者执行ctrl+c命令。则整个redis服务也会停掉。
前端启动redis-server命令
/usr/local/redis-4.0.14/src/redis-server redis.conf
启动后
2.4.2 后端启动
修改redis.conf文件,可以通过命令行通过 /关键词 回车查找关键词,比如
#修改redis的配置
vim /usr/local/redis-4.0.14/redis.conf
#修改如下
#修改redis服务的ip
bind 192.168.10.101 127.0.0.1
#修改redis的认证密码
requirepass root
#修改redis的日志存储文件
logfile "/usr/local/redis-4.0.14/redis.log"
#指定redis以守护进程启动(这个改成yes后,在启动就是以后端启动了)
daemonize yes
配置文件修改完成后,就可以启动redis服务端了
/usr/local/redis-4.0.14/src/redis-server /usr/local/redis-4.0.14/redis.conf
查看是否启动
#判断redis是否启动
[root@user1 redis-4.0.14]# ps -ef | grep redis
三、Redis客户端
3.1 Redis自带的客户端
进入客户端命令
/usr/local/redis-4.0.14/src/redis-cli -h 192.168.10.101 -p 6379 -a root -n 1
-h : redis的服务ip
-p : redis的端口
-a : redis的密码
-n : 指定进入redis的数据库
#进入redis的客户端
[root@user1 redis-4.0.14]# /usr/local/redis-4.0.14/src/redis-cli -h 192.168.10.101 -p 6379#配置了密码的话需要先输密码
192.168.10.101:6379> auth root #输入redis的密码
OK
192.168.10.101:6379> ping #使用ping命令测试redis
PONG
192.168.10.101:6379> set name zs #设置key为name value为zs的一个键值对
OK
192.168.10.101:6379> get name #获取key为name的value值
"zs"
192.168.10.101:6379> select 1 #选择redis中的数据库1,默认在0库
OK
192.168.10.101:6379[1]> get name #在数据库1下获取key为name的value
(nil)
切换数据库
#通过select命令切换数据库,默认在0库
192.168.10.101:6379> select 1
192.168.10.101:6379[1]>
3.2 Windows安装redis桌面客户端
下载链接:Release 0.8.8 · uglide/RedisDesktopManager · GitHub
安装:下载完成后双击redis-desktop-manager-0.8.8.384.exe,选择安装路径即可
连接Redis服务器
连接成功后在db(0)数据库中可以看到我们之前添加的name zs键值对
3.3 Redis命令行操作
3.3.1 字符串类型操作命令
#set key value 命令添加键值对
129.0.0.1Redis.assets6379> set str1 angelababy
OK#get key命令获取key对应的value
129.0.0.1Redis.assets6379> get str1
" angelababy"#del key 删除对应的键值对
129.0.0.1Redis.assets6379> del str1
自增 incr key
value必须为数字类型
129.0.0.1Redis.assets6379> set s1 1
OK
129.0.0.1Redis.assets6379> incr s1
(integer) 2
129.0.0.1Redis.assets6379> incr s1
(integer) 3自减 decr key
129.0.0.1Redis.assets6379> decr s1
(integer) 2
129.0.0.1Redis.assets6379> decr s1
(integer) 1
自增自减指定数值
129.0.0.1Redis.assets6379> incrby s1 3
(integer) 4
129.0.0.1Redis.assets6379> decrby s1 3
(integer) 1设置或者获取多个key/value
129.0.0.1Redis.assets6379> mset s1 v1 s2 v2
OK
129.0.0.1Redis.assets6379> mget s1 s2
1) "v1"
2) "v2"
3.3.2 Hash命令
hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。如下:
无论是是下面哪个命令,
- hset
在redis中,命令是不区分大小写,但是key区分大小写
192.168.10.101:6379> hset stu_1 name zhangsan
(integer) 1
192.168.10.101:6379> hset stu_1 age 18
(integer) 1
192.168.10.101:6379> hset stu_1 sex 1
(integer) 1
- hget
192.168.10.101:6379> hget stu_1
(error) ERR wrong number of arguments for 'hget' command
192.168.10.101:6379> hget stu_1 name
"zhangsan"
- hdel
192.168.10.101:6379> hdel stu_1
(error) ERR wrong number of arguments for 'hdel' command
192.168.10.101:6379> hdel stu_1 sex
(integer) 1
hget和hdel命令 键和字段(field)都必须给定,不能只给键,否则会报错
- 批量操作
192.168.10.101:6379> hmset key field1 value1 field2 value2
OK
192.168.10.101:6379> hmget key field1 field2
1) "value1"
2) "value2"
192.168.10.101:6379> hmget key field1 field2 field3
1) "value1"
2) "value2"
3) (nil)
- 增加value数值
192.168.10.101:6379> hincrby stu_1 age 2
(integer) 20
- 判断字段是否存在
HEXISTS key field
192.168.10.101:6379> hexists stu_1 age
(integer) 1
192.168.10.101:6379> hexists stu_1 sex
(integer) 0
3.3.3 List命令
#从列表最左边插入
192.168.10.101:6379> LPUSH l1 zs ls wa gd ma ch cunhua
(integer) 7#从列表最左边开始枚举
192.168.10.101:6379> LRANGE l1 0 -1
1) "cunhua"
2) "ch"
3) "ma"
4) "gd"
5) "wa"
6) "ls"
7) "zs"#从列表最左边开始弹出
192.168.10.101:6379> LPOP l1
"cunhua"
192.168.10.101:6379> LRANGE l1 0 -1
1) "ch"
2) "ma"
3) "gd"
4) "wa"
5) "ls"
6) "zs"
192.168.10.101:6379> RPOP l1
"zs"
192.168.10.101:6379> LRANGE l1 0 -1
1) "ch"
2) "ma"
3) "gd"
4) "wa"
5) "ls"
其它列表List、集合Set和有序集合ZSet类型的命令我们不再赘述,大家有时间再学习。
3.4 Java客户端连接
3.4.1 JedisAPI连接
Jedis就是Redis的客户端连接对象,也就是创建的实例连接的Connection对象,类似于MySQL的JDBC-Driver驱动。
3.4.2 单机连接
创建Maven工程,导入Pom依赖
<!--Redis依赖-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.0.0</version>
</dependency>
代码测试
package com.redis
import redis.clients.jedis.Jedis
/**
* redis的测试
*/
object RedisTest {
def main(args: Array[String]): Unit = {
//获取jedis的对象
val jedis = new Jedis("user1", 6379)
//设置redis的密码
jedis.auth("root")
//测试redis
val res = jedis.ping()
println(res)
//选择redis的库
jedis.select(2)
//测试字符串
jedis.set("scala","scala-jedis")
println(jedis.get("scala"))
//测试列表
jedis.lpush("l1","1","3","2","hello")
println(jedis.lrange("l1",0,-1))
//关闭jedis对象
jedis.close()
}
}
测试运行结果