Redis入门
redis的说明
Redis 是一个开源的,内存中的数据结构存储系统它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构
1. Redis常用命令
string类型:
命令 | 说明 | 案例 |
---|---|---|
set | 添加key-value | set username admin |
get | 根据key获取数据 | get username |
exists | 判断key是否存在 | exists name(返回1存在 0不存在) |
del | 删除redis中的key | del key |
Keys | 用于查询符合条件的key | keys 查询redis中全部的key,keys n?me 使用占位符获取数据 keys nam 获取nam开头的数据 |
Hash类型
命令 | 说明 | 案例 |
---|---|---|
hset | 为对象添加数据 | hset key field value |
hget | 获取对象的属性值 | hget key field |
hexists | 判断对象的属性是否存在 | HEXISTS key field1表示存在 0表示不存在 |
hdel | 删除hash中的属性 | hdel user field |
List类型
说明
Redis中的List集合是双端循环列表,分别可以从左右两个方向插入数据
List集合可以当做队列使用,也可以当做栈使用
队列:存入数据的方向和获取数据的方向相反
栈:存入数据的方向和获取数据的方向相同
命令 | 说明 | 案例 |
---|---|---|
lpush | 从队列的左边入队一个或多个元素 | LPUSH key value |
rpush | 从队列的右边入队一个或多个元素 | RPUSH key value |
lpop | 从队列的左端出队一个元素 | LPOP key |
rpop | 从队列的右端出队一个元素 | RPOP key |
Redis事务命令
说明
说明:redis中操作可以添加事务的支持.一项任务可以由多个redis命令完成,如果有一个命令失败导致入库失败时.需要实现事务回滚.
命令 | 说明 | 案例 |
---|---|---|
multi | 标记一个事务开始 | 127.0.0.1:6379> MULTI |
exec | 执行所有multi之后发的命令 | 127.0.0.1:6379> EXEC |
discard | 丢弃所有multi之后发的命令 |
Redis入门
导入jar包
redis.clients
jedis
org.springframework.data
spring-data-redis
客户端操作String类型
前提
创建一个Java类测试类
配置redis服务
主要目的测试程序远程操作Redis是否有效
1.redis需要关闭IP绑定模式
2.redis关闭保护模式
3.redis最好开启后端运行
redis入门案例(1)
整体结构
public void test01() throws InterruptedException {
//1.测试链接
Jedis jedis = new Jedis("192.168.126.129",6379);
jedis.set("a", "动态获取redis中的数据");
System.out.println(jedis.get("a"));
//2.测试数据是否存在
if(jedis.exists("a")){
jedis.set("a", "修改数据");
}else{
jedis.set("a", "新增数据");
}
//3.删除redis
jedis.del("a");
//4.清空所有的数据
jedis.flushDB();
jedis.flushAll();
//5.为数据添加超时时间
jedis.set("b", "设定超时时间");
jedis.expire("b", 10);
Thread.sleep(2000);
System.out.println(jedis.ttl("b"));
}
1 . 测试链接
Jedis jedis = new Jedis("192.168.126.129",6379);
jedis.set("a", "动态获取redis中的数据");
System.out.println(jedis.get("a"));
1 - Jedis是在springboot中使用redis的时候引入到包,他springboot中代表redis new一个Jedis的时候参数的方式来引入redis所在的ip地址和端口。
2 - set是 添加key和value
3 - get是 获取根据key获取value
2 . 测试数据是否存在
if(jedis.exists("a")){
jedis.set("a", "修改数据");
}else{
jedis.set("a", "新增数据");
}
exists 是判断数据是否存在
判断 a 是否存在 如果存在的话a的value值改成<修改数据>,如果不存在的话a的value是<新增数据>
3 . 删除redis
jedis.del("a");
del 表示删除
删除key 是 a 的数据
4 . 清空所有的数据
jedis.flushDB();
jedis.flushAll();
flushDB 清空单个数据库
flushAll 清空全部数据库
此方法很危险删除你的数据所以不建议使用
5 . 为数据添加超时时间
jedis.set("b", "设定超时时间");
jedis.expire("b", 10);
Thread.sleep(2000);
System.out.println(jedis.ttl("b"));
redis入门案例(2)
原子性
什么是原子性?
一个事务是一个不可分割的最小工作单位,要么都成功要么都失败。
原子操作是指你的一个业务逻辑必须是不可拆分的.比如你给别人转钱,你的账号扣钱,别人的账号
增加钱,这个业务逻辑就是原子性的,这个操作就是原子操作,要么都成功要么都失败。
Redis所有单个命令的执行都是原子性的。
整体结构
public void test02(){
Jedis jedis = new Jedis("192.168.126.129", 6379);
jedis.set("c", "测试redis");
//需求1: 如果数据不存在时,才会为数据赋值.
jedis.setnx("d","测试setnx方法");
System.out.println(jedis.get("d"));
//需求2: 需要为数据添加超时时间,同时满足原子性的要求
//为数据添加超时时间
jedis.setex("s", 20, "为数据添加超时111");
System.out.println("获取超时时间:"+jedis.ttl("s"));
}
需求1
如果数据不存在时,才会为数据赋值.
jedis.setnx("d","测试setnx方法");
System.out.println(jedis.get("d"));
setnx - 在指定的 key 不存在时,为 key 设置指定的值
如果d不存在的话才指定值
需求2
需要为数据添加超时时间,同时满足原子性的要求
jedis.setex("s", 20, "为数据添加超时111");
System.out.println("获取超时时间:"+jedis.ttl("s"));
setex - 指定的key设置值及其过期时间。如果key已经存在, setex 命令将会替换旧的值
需求3
如果数据存在才修改,并且为数据添加超时时间,满足原子性要求
SetParams:
XX: 数据存在时赋值.
NX: 数据不存在时赋值
EX: 添加超时时间单位秒
PX: 添加超时时间单位毫秒
使用Redis中的setparams
public void test03(){
Jedis jedis = new Jedis("192.168.126.129", 6379);
jedis.flushAll();
SetParams setParams = new SetParams();
setParams.xx().ex(20);
jedis.set("a", "测试方法",setParams);
System.out.println(jedis.get("a"));
}