目录
前言
Redis用途:1. 数据库 2. 缓存
集群:哨兵、主从、分片式
一、简介
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。
它支持字符串String、哈希表hash、列表list、集合set、有序集合zset(sort set),位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
NoSQL数据库:Redis、ehcache、MongoDB
是直接通过键值对的方式取值,数据之间不存在关系
SQL数据库:SqlServer、Oracle、MySQL
通过查询表的方式获取数据,数据之间存在关系,通过表联系
作用:提升程序运行的效率
学习网址:https://www.w3cschool.cn/redis/
www.redis.cn
www.redis.net.cn
下载
redis-5.0.0.tar.gz(linux)
Redis-x64-3.2.100.msi(window安装版)
Redis-x64-3.2.100.zip(window解压版)
二、Linux上安装Redis
首先将Redis安装包下载下来
开启虚拟机⬇⬇⬇
打开虚拟机连接工具⬇⬇⬇
1.解压redis
tar -zxvf redis-5.0.0.tar.gz -C 解压到当前目录
2.安装gcc
Redis安装完成后,需要安装gcc,redis与tomcat最大的不同就是 redis的使用需要gcc环境支持
yum install gcc 安装命令
安装前记得检查一下网络,如网速过慢,建议切换一个网络后再进行下载
3.编译redis
cd /redis-5.0.0 在这个目录下
make
4.检测安装情况
make install
5.修改redis.conf文件
cp redis.conf redis_bak.conf
将daemonize no 改为 daemonize yes
当连接工具不能直接打开编辑器,那么需要通过 / + 查询关键字 快速定位单词所在位置,按 n 键下一个
6.启动redis
./redis-server ../redis.conf
演示一个不推荐的启动方法⬇⬇⬇
这样启动redis,就不可以执行其他命令了,不可以做事了,所以不推荐该方式
如果我们想输入其他命令,Ctrl+C就可以了,但是刚启动的redis又被停掉了
我们使用 守护进程 的方式启动,守护进程的作用就是当我启动完了,还可以输命令
先将redis.conf备份 ,目的在于如果某一天想用最初版本,为那一天留后路
守护进程启动方法,看到区别了不~~~
7.测试redis启动是否成功
./redis-cli
ping
退出exit
使用Redis桌面管理器(RDM)连接一下端口,测试是否可以连接
没连接上第一个原因是:端口没开放
第二个原因是:redis.conf里还缺少配置
第一步将端口开放
firewall-cmd --zone=public --add-port=6379/tcp --permanent
跟新防火墙规则
firewall-cmd --reload
防火墙列表
firewall-cmd --zone=public --list-ports
修改redis.conf
注释:bind 127.0.0.1
修改:requirepass 123456
Esc+:wq保存并提出
查看端口,此时该端口已在使用
杀掉redis进程:kill -9 进程pid
连上了
小结:①上传并解压redis.gz
②yum install -y gcc
③进入 redis 的解压目录,执行命令make
④修改redis为守护进程
⑤开放6379的端口
⑥授权,允许运程链接
之前我们链接客户端,输入这行命令直接就连上了吧 ,现在不能这么连,因为之前是没有密码的,所以这行命令要改一下
加上IP、密码连接
-h(-host) -p(-port) -a(authentication)
三、Redis的常用命令
Redis中的常用命令就是开发过程中,所有调用的Redis api中的方法
连上之后我们就可以去操作五种数据类型
我先给大家演示一下这么切换redis数据库(如果redis中有很多数据库的话,是需要切换到指定数据库再进行后续操作的)
1、Redis字符串(String)
set key //保存
set name zs
set age 12
set sex nan
删除
修改
get key //获取
get name
type key //查看类型
type age //string 说明type返回的是键值对存储类型,而不是值存储类型
keys *或keys key //查看所有或者指定的key
keys *
SETEX KEY_NAME TIMEOUT VALUE // 给键值对设置过期时间
setex zs 60 live
ttl key // 获取键值对剩余的存活时间
ttl zs
2、Redis哈希(Hash)
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
hset key field1 value1 [field2 value2] #同时将多个field-value设置到哈希表key中
hset user name zs age 12 sex nv
hget key field #获取指定的字段值
hget user age
hdel key field #删除指定的字段值
hdel user age
hgetall key #查询指定key的所有字段
hgetall user
hexists key field #查询指定key中的字段是否存在
hexists user name
hlen key #获取指定key中的长度
hlen user
3、Redis列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
lpush key value1 value2 value3 #将一个或多个值插入到列表头部
lpush en a b c d e f g
llen key #获取列表的长度
llen en
lindex key index #根据索引获取列表中的元素
lindex en 1 #返回f,说明下标从0开始,同时先进后出
lrange key start sop #查看指定范围内的元素
lrange en 1 3 #返回fed,说明下标从0开始,同时先进后出
4、Redis集合(Set)
sadd key value1 [value2] #向集合添加一个或多个元素
sadd hobby lanqiu zuqiu bingpangqiu zhuoqiu
scard key #获取集合中的元素数量
scard hobby
exists key #是否存在
exists hobby
5、有序集合(sort set)
有序集合的成员是唯一的,但分数(score)却可以重复。
学习网址,向这走⬇⬇⬇
四、Java连接操作Redis
Java连接redis
导入pom依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
Java链接
Jedis jedis = new Jedis("192.168.195.139", 6379);
jedis.auth("123456");
System.out.println(jedis.ping());
jedis.select(1);
Java操作redis
Redis字符串(String)
// #set key //保存
jedis.set("string_name","wangwu");
// #get key //获取
System.out.println(jedis.get("string_name"));
// #type key //查看类型
System.out.println(jedis.type("string_name"));
// #keys * 或keys key //查看所有或者指定的key
System.out.println(jedis.keys("*"));
// #SETEX KEY_NAME TIMEOUT VALUE // 给键值对设置过期时间
jedis.setex("string_zs",30,"活着");
// #ttl key // 获取键值对剩余的存活时间
System.out.println(jedis.ttl("string_zs"));
Redis哈希(Hash)
// # hset key field1 value1 [field2 value2] #同时将多个field-value设置到哈希表key中
jedis.hset("java_user","name","zs");
jedis.hset("java_user","sex","男");
jedis.hset("java_user","age","12");// # hget key field #获取指定的字段值
System.out.println(jedis.hget("java_user", "sex"));// # hdel key field #删除指定的字段值
jedis.hdel("java_user","sex");// # hgetall key #查询指定key的所有字段
Map<String, String> java_user_map = jedis.hgetAll("java_user");
System.out.println(java_user_map);// # hexists key field #查询指定key中的字段是否存在
Boolean java_user = jedis.hexists("java_user","sex");
System.out.println(java_user);// # hlen key #获取指定key中的长度
Long java_user_len = jedis.hlen("java_user");
System.out.println(java_user_len);
Redis列表(List)
// # lpush key value1 value2 value3 #将一个或多个值插入到列表头部
jedis.lpush("java_hobby", "篮球", "足球", "羽毛球");
// # llen key #获取列表的长度
Long java_hobby_len = jedis.llen("java_hobby");
System.out.println(java_hobby_len);
// # lindex key index #根据索引获取列表中的元素
System.out.println(jedis.lindex("java_hobby", 0));
// # lrange key start sop #查看指定范围内的元素
System.out.println(jedis.lrange("java_hobby", 0, 1));
Redis集合(Set)
// # sadd key value1 [value2] #向集合添加一个或多个元素
jedis.sadd("java_set_user","张三","李四","王五","张三丰");
// # scard key #获取集合中的元素数量
System.out.println(jedis.scard("java_set_user"));
// # exists key #是否存在
System.out.println(jedis.exists("java_set_user"));