redis入门
redis入门-命令行模式
windows版本:
redis安装包和可视化界面
链接: link
提取码:7qhx
启动redis: 解压redis后,选中redis所在的目录下进入cmd界面
redis-server.exe redis.windows.conf
进入redis客户端–默认方式
redis-cli.exe
进入redis客户端–添加IP地址和PORT端口
redis-cli.exe -h localhost -p 6379
设置进入redis客户端的密码,在redis所在的目录下进入redis.windows,conf文件
用ctrl+F快捷键找到requirepass ,在后面设置123456
进入redis客户端–添加IP地址和PORT端口,-a为附加密码
redis-cli.exe -h localhost -p 6379 -a 123456
redis入门-可视化界面模式
安装Another-Redis-Desktop-Manager
进入Another-Redis-Desktop-Manager,点击New Connection
输入IP地址,PORT端口,密码,连接名称,确定即可
就能看到连接的信息
redis常见数据类型
字符串操作命令
进入redis可视化界面,点击标红处的redis控制台
#设置name的值为jack
set name jack
#获取name的值
get name
#获取abc(不存在),返回null
get abc
#设置code的值为1234,并且过期时间设置为30秒
setex code 30 1234
#获取code的值
get code
#如果key1不存在值,则设置key1的值为itcast,成功则返回1
#若key1已有值,则不可赋值,返回0
#setnx -> set if not exist 若不存在则赋值
setnx key1 itcast
#获取key1的值
get key1
哈希操作命令
#设置key为100,filed为name, value为xiaoming
hset 100 name xiaoming
#设置key为100,filed为age, value为22
hset 100 age 22
#获取key为100,filed为name的value值
hget 100 name
#获取key为100,filed为age的value值
hget 100 age
#删除key为100,filed为name所属的filed和value(意思就是filde为name且value为xiaoming的数据一起被删除了)
hdel 100 name
#获取key为100下所有的filed值
hkeys 100
#获取key为100下所有的value值
hvals 100
列表操作命令
#在key为mylist的列表头部插入abc,此时的列表排序为c b a(类似于队列先进先出)
lpush mylist a b c
#在key为mylist的列表头部插入d,此时的列表排序为d c b a,可以看下一张图片所示
lpush mylist d
#获取key为mylist的start到stop的范围元素,此时为获取全部,0为起始,-1为末尾
#必须有
lrange mylist 0 -1
#去除key为mylist的末尾元素,(类似于队列,先进先出)
rpop mylist
#获取key为mylist的长度
llen mylist
lpush插入展示
补充lrange的使用事项
超出范围的下标值不会引起错误
#此时的列表mylist长度为2,元素为d c
1、如果 start 下标比列表的最大下标 end ( LLEN list 减去 1 )还要大,那么 LRANGE 返回一个空列表。
#此时最大下标end为2-1=1
#当start为2时,stop为1,已经返回空列表了
#start为3,100同理
2、如果 stop 下标比 end 下标还要大,Redis将 stop 的值设置为 end 。
#此时最大下标end为2-1=1
#当stop为2时,end为1,则stop>end,stop被设置为1
语句由
lrange mylist 0 2
变为
lrange mylist 0 1
#stop为100同理
集合操作命令
#向集合set1 添加a b c d四个成员
sadd set1 a b c d
#向集合set1重复添加a成员,会报错
sadd set1 a
#查看set1中的成员
smembers set1
#查看set1的成员数
scard set1
#向集合set2添加a b x y四个元素
sadd set2 a b x y
#查看set1和set2的交集
sinter set1 set2
#查看set1和set2的并集
sunion set1 set2
#删除集合set1的a成员
srem set1 a
有序集合操作命令
#向有序集合zset1添加分数为10.0的成员a和10.5的成员b
zadd zset1 10.0 a 10.5 b
#向有序集合zset1添加分数为10.2的成员c
zadd zset1 10.2 c
#获取有序集合的索引区间的成员
zrange zset1 0 -1
#获取有序集合的索引区间的成员,带分数
zrange zset1 0 -1 withscores
#给有序集合zset1的成员a追加分数5.0
zincrby zset1 5.0 a
#删除有序集合zset1的成员b
zrem zset1 b
通用命令
#查找所有的key
keys *
#查找所有以set开头的key
kays set*
#查看key为name是否存在
exists name
#查看key为name的类型
type name
#删除key为name(删除1个)
del name
#删除key为set1 set2 zset1(删除多个)
del set1 set2 zset1
Spring Data Redis
在java中操作Spring Data Redis
使用准备
SpringBoot,JB IDEA
1、导入依赖
denpendency
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!--#redis的版本,spring的父类里有 -->
</dependency>
2、修改配置文件
application.yml
spring:
redis:
host: ${sky.redis.host}
port: ${sky.redis.port}
password: ${sky.redis.password}
#redis初始准备了16个数据库,不同数据库之间的数据完全隔离
#不配置数据库的话,默认用DB0号数据库
database: ${sky.redis.database}
application-dev.yml (本地开发环境)
sky:
redis:
host: localhost
port: 6379
password: 123456
#redis初始准备了16个数据库,不同数据库之间的数据完全隔离
#不配置数据库的话,默认用DB0号数据库
database: 10
3、在config包下创建配置对象
RedisConfiguration.java
@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、在Test文件夹下创建单元测试类
SpringDataRedisTest.java
@SpringBootTest
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testRedisTemplate(){
System.out.println(redisTemplate);
ValueOperations valueOperations = redisTemplate.opsForValue();
HashOperations hashOperations = redisTemplate.opsForHash();
ListOperations listOperations = redisTemplate.opsForList();
SetOperations setOperations = redisTemplate.opsForSet();
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
}
/**
* 操作字符串类型的数据
*/
@Test
public void testString(){
// set get setex setnx
// set
redisTemplate.opsForValue().set("name","小明");
//redis的字符串与java的字符串有些区别
// get
String city = (String) redisTemplate.opsForValue().get("name");
System.out.println(city);
// setex
redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
// setnx
redisTemplate.opsForValue().setIfAbsent("lock","1");
redisTemplate.opsForValue().setIfAbsent("lock","2");
}
/**
* 操作哈希类型数据
*/
@Test
public void testHash(){
//hset hget hdel hkeys hvals
HashOperations hashOperations = redisTemplate.opsForHash();
// hset
hashOperations.put("100", "name", "tom");
hashOperations.put("100", "age", "20");
// hget
String name = (String) hashOperations.get("100", "name");
System.out.println(name);
// hkeys
Set keys = hashOperations.keys("100");
System.out.println(keys);
// hvalues
List values = hashOperations.values("100");
System.out.println(values);
hashOperations.delete("100", "age");
}
/**
* 操作集合类型的数据
*/
@Test
public void testSet(){
// sadd smembers scard sinter sunion srem
SetOperations setOperations = redisTemplate.opsForSet();
// sadd
setOperations.add("set1","a","b","c","d");
setOperations.add("set2","a","b","x","y");
//smembers全部成员
Set members = setOperations.members("set1");
System.out.println(members);
//scard个数
Long size = setOperations.size("set1");
System.out.println(size);
//sinter交集
Set intersect = setOperations.intersect("set1", "set2");
System.out.println(intersect);
//sunion
Set union = setOperations.union("set1", "set2");
System.out.println(union);
setOperations.remove("set1","a","b");
}
/**
* 操作有序集合类型的数据
*/
@Test
public void testZset(){
// zadd zrange zincrby zrem
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
// zadd
zSetOperations.add("zset1","a",10);
zSetOperations.add("zset1","b",12);
zSetOperations.add("zset1","c",9);
// zrange
Set zset1 = zSetOperations.range("zset1", 0, -1);
System.out.println(zset1);
// zincrby
zSetOperations.incrementScore("zset1","c",10);
// zrem
zSetOperations.remove("zset1","a","b");
}
/**
* 通用命令操作
*/
@Test
public void testCommon(){
// keys exists type del
// keys
Set keys = redisTemplate.keys("*");
System.out.println(keys);
// exists
Boolean name = redisTemplate.hasKey("name");
Boolean set1 = redisTemplate.hasKey("set1");
// type
for (Object key : keys) {
DataType type = redisTemplate.type(key);
System.out.println(type.name());
}
// del
redisTemplate.delete("mylist");
}
}