在苍穹外卖中接触到的一点ridis
目录
介绍
基于内存的key-value的结构数据库
优点
- 基于内存存储,读写性高
- 适合存储热点数据,也就是访问量大的数据(秒杀商品、资讯...)
- 它是对mysql的补充,并不会取代mysql
下载安装与启动
解压
启动:在改目录下启动cmd,然后输入redis-server.exe redis.windows.conf来启动服务,通过ctrl+c结束
连接本地客户端:redis-cli.exe
退出客户端:exit
指定连接的端口号:redis-cli.exe -h localhost -p 端口号 -a 密码
注意要在服务端打开的情况下,重新开一个cmd来进行连接,要不然会出现计算机拒绝
修改密码:在配置文件中找到 # requirepass foobared,去掉注释,将foobared改为要设置的密码,这里我设置的是123456
图形化界面:使用Another Redis Desktop Manager
在图形化界面中,TTL显示过期时间
数据类型
五种常用数据类型
其中key是字符串类型,value有五种常用的数据类型
key | value | 特点 |
字符串Strng | 普通字符串 | |
哈希hash | 也叫散列,类似于java中的hashMap(适合存储有多个属性的对象) | |
列表list | 类似队列,按照插入顺序排序,可以有重复元素,适合存储有顺序的数据 | |
集合set | 类似HashSet,无序,没有重复元素 | |
有序集合sorted set/zset | 集合中每个元素关联一个分数score,按照score升序排序,没有重复元素(可以各种排行榜) |
常用命令
字符串操作命令
命令 | 作用 |
SET key value | 设置指定Key的value |
GET key | 获取指定key的值 |
SETEX key seconds value | 设置key的value,并设置key的过期时间为seconds秒 |
SETNX key value | 只有在key不存在时设置key的value |
哈希操作命令
命令 | 作用 |
HSET key field value | 设置哈希表Key中字段field的value |
HGET key field | 获取key中指定字段的值 |
HDEL key field | 删除存储在哈希表中指定字段 |
HKEYS key | 获取哈希表中的所有字段field |
HVALS key | 获取哈希表中所有的value |
列表操作命令
命令 | 作用 |
LPUSH key value1 [value2] | 将一个或多个值插入到列表头部(a的前面) |
LRANGE key start stop | 获取列表指定范围内的元素 |
RPOP key | 移除并获得列表最后一个元素(d) |
LLEN key | 获取列表长度(4) |
集合操作命令
命令 | 作用 |
SADD key member1 [member2] | 向集合添加一个或多个成员 |
SMEMBERS key | 返回集合中的所有成员 |
SCARE key | 获取集合中的成员数 |
SINTER key1 [key2] | 返回给定所有集合的交集 |
SUNION key1 [key2] | 返回所有给定集合的并集 |
SREM key member1 [member2] | 删除集合中一个或多个成员 |
有序集合操作命令
命令 | 作用 |
ZADD key score1 member1[score2 member2] | 向有序集合添加一个或多个元素 |
ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合中指定区间的成员 |
ZINCRBY key increment member | 有序结合中指定元素的分数+increment |
ZREM key member [member] | 移除有序集合中的一个或多个成员 |
通用命令
部分数据类型的,每种数据类型都可以使用
命令 | 作用 |
KEYS patter | 查找所有符合给定模式(patter)的key |
EXISTS key | 检查给定key是否存在 |
TYPE key | 返回key所储存的值的类型 |
DEL key | 该命令用于在key存在是删除key |
在java中操作redis
redis的java客户端:Spring Data Redis
操作步骤
- 导入Spring Data Redis的maven坐标
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
- 配置Redis数据源,在application.yml中,在spring目录下
redis: #当前要连接的redis的ip地址 host: ${sky.redis.host} #端口号 port: ${sky.redis.port} password: ${sky.redis.password} #创建时或默认创建16个库,指定使用哪个数据库,这16个库是完全隔离的 #并不是必须的 database: {sky.redis.database
- 编写配置类,创建RedisTemplate对象,在config包中创建一个RedisConfiguration.class
@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; }
- 通过RedisTemplate对象操作Redis
@Autowired private RedisTemplate redisTemplate;
RedisTemplate操作数据
字符串String类型
public void testString(){
//set get setex setnx
redisTemplate.opsForValue().set("city","北京");//set
String city=(String) redisTemplate.opsForValue().get("city");//get
System.out.println(city);
redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);//setex
redisTemplate.opsForValue().setIfAbsent("lock","1");//setnx
redisTemplate.opsForValue().setIfAbsent("lock","2");//setnx 同名设置不成功
}
哈希Hash类型
public void testHash(){
//操作命令:hset hget hdel hkeys hvals
HashOperations hashOperations = redisTemplate.opsForHash();
//hset
hashOperations.put("100","name","tom");
hashOperations.put("100","age","18");
String name = (String) hashOperations.get("100", "name");//hget
System.out.println(name);
Set keys=hashOperations.keys("100");//hkeys
System.out.println(keys);
List values=hashOperations.values("100");//hvals
System.out.println(values);
hashOperations.delete("100","age");//hdel
}
其他三种数据类型的操作都差不多