redis入门
keys * 检查是否有记录
redis简介
redis是一个基于 内存 的key-value结构数据库
基于内存存储,读写性能高
适合存储热点数据(热点商品,资讯,新闻)
企业应用广泛
redis下载安装
解压完目录结构:
redis.windows.config redis配置文件
redis-cli.exe redis客户端
redis-server.exe redis服务器
redis服务启动与停止
redis服务端:
进入解压目录,输入cmd
启动:redis-server.exe redis.windows.conf
停止:ctrl+c
reids客户端
进入解压目录,输入cmd
启动:redis-cli.exe(redis-cli.exe -h localhost -p 6379 -a 123456(所设置的密码) )
停止:exit
修改redis密码
打开redis.windows.config 按压ctrl+f 搜索 输入pass
去掉#, requirepass 123456(需要的密码)
redis数据类型
5种常用数据类型介绍
redis存储的是key-value结构的数据,key是字符串类型,value有5种常用的数据类型
字符串 string
哈希 hash
列表 list
集合 set
有序集合 sorted set/zset
各种数据类型的特点
redis常用命令
字符串操作命令string
SET key value 设置指定key的值
GET key 获取指定key的值
SETEX key seconds value 设置指定key的值,并将key的过期时间设为seconds秒 (setex code 60 1234)
SETNX key value 只有在key不存在时设置key的值
哈希操作命令hash
redis hash 是一个 string类型的field和value的映射表,hash特别适合用于存储对象,常用命令:
HSET key field value 将哈希表key中的字段field的值设为value
HGET key field 获取存储在哈希表中指定字段的值
HDEL key field 删除存储在哈希表中的指定字段
HKEYS key 获取哈希表中所有字段(field)
HVALS key 获取哈希表中所有值
列表操作命令list
redis列表是简单的字符串列表,按照插入顺序排序,常用命令:
LPUSH key value1[value2] 将一个或多个值插入到列表头部(lpush mylist a b c d)
LRANGE key start stop 获取列表指定范围内的元素(lrange mylist 0 -1)
RPOP key 移除并获取列表最后一个元素
LLEN key 获取列表长度
集合操作命令set
reids set 是string 类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据,常用命令:
SADD key member1[member2] 向集合添加一个或多个成员(sadd set1 a b c d)
SMEMBERS key 返回集合中的所有成员( smembers set1)
SCARD key 获取集合的成员数(scard set1)
SINTER key1[key2] 返回给定所有集合的交集(sinter set1 set2)
SUNION key1[key2] 返回所有给定集合的并集
SREM key member1[member2] 删除集合中一个或多个成员(srem set1 a)
有序集合操作命令sorted set/zset
reids有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数。常用命令:
ZADD key score1 member1[score2 member2] 向有序集合添加一个或多个成员
(zadd zset1 10.0 a 10.5 b)
ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员
(zrange zset1 0 -1 withscores)
ZINCRBY key increment member 有序集合中对指定成员的分数上增量increment
(zincrby zset1 5.0 a)给a加5.0分
ZREM key member [member...] 移除有序集合中的一个或多个成员
(zrem zset1 a b)
通用命令
redis的通用命令是不分数据类型的,都可以使用的命令:
KEYS pattern 查找所有符合给定模式(pattern)的key
EXISTS key 检查给定key是否存在
TYPE key 返回key所储存的值的类型
DEL key 该命令用于在key存在 是删除key
java中操作redis
redis的java客户端
jedis lettuce spring data redis
spring data redis 是spring的一部分,对redis底层开发包进行了高度封装。在spring项目中,可使用spring data redis来简化操作。
spring data redis使用方式
//1导入spring data redis的maven坐标(pom.xml文件配置)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
//2配置redis数据源(resource下的application主文件引用application-dev资源)
spring:
redis:
host: ${sky.redis.host}
port: ${sky.redis.port}
password: ${sky.redis.password}
database: ${sky.redis.database}
//dev资源
sky:
redis:
host: 192.168.8.128
port: 6379
password:
database: 10
//3编写配置类,创建redistemplate对象(创建redisconfig配置类)
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
log.info("开始创建redis模板对象...");
RedisTemplate redisTemplate = new RedisTemplate();
//设置redis的连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置redis key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
//4通过redistemplate对象操作redis
@SpringBootTest
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test//操作字符串类型数据
public void testString(){
//set get setex setnx
redisTemplate.opsForValue().set("city","小明");
String city=(String) redisTemplate.opsForValue().get("name");
System.out.println(city);
redisTemplate.opsForValue().set("code","1234", 3, KSQLWindow.TimeUnit.MINUTES);
redisTemplate.opsForValue().setIfAbsent("lock","1");
}
}
@Test//hash
public void testHash(){
//hset hget hdel hkeys hvals
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("100","name","tom");
String name = (String) hashOperations.get("100", "name");
Set keys = hashOperations.keys("100");
List values = hashOperations.values("100");
hashOperations.delete("100","age");
}
//list lpush lrange rpop llen
list.leftPushAll("mylist","a","b");
list.leftPush("mylist","d");
list.range("mylist",0,-1);
list.rightPop("mylist");
list.size("mylist");
//set集合 sadd smember scard sinter sunion srem
.add("set1","a","c");
.members("set1");
.size("set1");
.intersect("set1","set2");
.union("set1","set2");
.remove("set1,"a","c");
//zset zadd zrange zincrby zrem
.add("zset1","c",5);
.range("zset1",0,-1);
.incrementScore("zset1","c",10);//加10
.remove("zset1","a"."b");
//common keys exists type del
.keys("*");
.haskey("name");
for(Object key : keys){
DataType type=redisTemplate.type(key);
}
.delete("mylist");
店铺营业状态设置
营业状态数据存储方式:基于redis的字符串来进行存储
key value
shop_status 1
//controller admin
@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {
public static final String KEY = "SHOP_STATUS";
@Autowired
private RedisTemplate redisTemplate;
/**
* 设置店铺的营业状态
* @param status
* @return
*/
@PutMapping("/{status}")
@ApiOperation("设置店铺的营业状态")
public Result setStatus(@PathVariable Integer status) {
log.info("设置店铺的营业状态为:{}",status == 1 ? "营业中" : "打烊中");
redisTemplate.opsForValue().set(KEY, status);
return Result.success();
}
/**
* 获取店铺的营业状态
* @return
*/
@GetMapping("/status")
@ApiOperation("获取店铺的营业状态")
public Result<Integer> getStatus(){
Integer status = (Integer) redisTemplate.opsForValue().get(KEY);
log.info("获取到店铺的营业状态为:{}",status == 1 ? "营业中" : "打烊中");
return Result.success(status);
}
}