Redis
redis是一个基于内存的key-value的结构数据库
启动: redis-server.exe redis.windows.conf
客户端链接:redis-cli.exe [-h 目标ip] [-p 端口] [-a 密码]
修改链接密码:
在redis.windows.conf
中的requirepass 123456
常用的数据类型
redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型
-
字符串 string
-
哈希 hash
-
列表 list
-
集合 set
-
有序集合 sorted set/zset
常用命令
字符串操作命令
SET key value 设置指定key的值
GET key 获取指定key的值
SETEX key seconds value 设置指定key的值,并将key的过期时间设置为seconds秒
SETNX key value 只有在key不存在时设置key的值
哈希操作命令
HSET key field value 将哈希表key中的字段field的值设置为value
HGET key field 获取存储在哈希表中指定字段的值
HDEL key field 删除存储在哈希表中的指定字段
HKEYS key 获取哈希表中所有的字段
HVALS key 获取哈希表中所有的值
列表操作命令
LPUSH key value1 [value2] 将一个或多个值插入到列表头部
LRANGE key start stop 获取列表指定范围内的元素
RPOP key 移除并获取列表最后一个元素
LLEN key 获取列表长度
集合操作命令
SADD key member1 [member2] 向集合添加一个或多个成员
SMEMBERS key 返回集合的所有成员
SCARD key 获取集合的成员数
SINTER key1 [key2] 返回给定所有集合的交集
SUNION key1 [key2] 返回所有给定集合的并集
SREM key member1 [member2] 删除集合中一个或多个成员
有序集合操作命令
ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员
ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员
ZINCRBY key increament member 有序集合中对指定成员的分数加上增量increment
ZREM key member [member...] 移除有序集合中的一个或多个成员
通用命令
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
依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.7.3</version> </dependency>
配置redis数据源(application.yml)
spring:redis:host: localhostport: 6379password: 123456database: 0
编写配置类,创建RedisTempalte对象
@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic 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
@SpringBootTest
public class SpringDataRedisTest {
@Autowiredprivate RedisTemplate redisTemplate;
@Testpublic void testRedisTempalte(){System.out.println(redisTemplate);}
}
操作字
符串类型的数据
/*** 操作字符串类型的数据*/
@Test
public void testString(){// set get setex setnx//插入redisTemplate.opsForValue().set("city", "北京");//获取String city = (String) redisTemplate.opsForValue().get("city");System.out.println(city);//插入,设置有效时间redisTemplate.opsForValue().set("code", "1234", 3, TimeUnit.MINUTES);//如果不存在插入redisTemplate.opsForValue().setIfAbsent("lock", 1);redisTemplate.opsForValue().setIfAbsent("lock", 2);//获取Integer lock = (Integer) redisTemplate.opsForValue().get("lock");System.out.println(lock);
}
操作哈希类型的数据
/**
* 操作哈希类型的数据
*/
@Test
public void testHash(){// hset hget hkeys hvalsHashOperations hashOperations = redisTemplate.opsForHash();
//插入hashOperations.put("100", "name", "tom");hashOperations.put("100", "age", 20);//获取String name = (String) hashOperations.get("100", "name");System.out.println(name);
//获取所有哈希valueList values = hashOperations.values("100");System.out.println(values);
//删除某个哈希keyhashOperations.delete("100", "age");
//获取所有哈希keySet keys = hashOperations.keys("100");System.out.println(keys);
}
操作列表类型的数据
/**
* 操作列表类型的数据
*/
@Test
public void testList() {// lput lrange rpop llenListOperations listOperations = redisTemplate.opsForList();
//左侧插入listOperations.leftPushAll("mylist", "a", "b", "c");listOperations.leftPush("mylist", "d");//范围获取List mylist = listOperations.range("mylist", 0, -1);System.out.println(mylist);//右侧弹出String mylist1 = (String) listOperations.rightPop("mylist");System.out.println(mylist1);//获取长度Long mylist2 = listOperations.size("mylist");System.out.println(mylist2);
}
操作集合类型的数据
/*** 操作集合类型的数据*/
@Test
public void testSet() {//sadd smembers scard sinter sunion sremSetOperations setOperations = redisTemplate.opsForSet();
//插入setOperations.add("set1", "a", "b", "c", "d");setOperations.add("set2", "a", "b", "x", "y");//获取所有元素Set set1 = setOperations.members("set1");System.out.println(set1);//获取交集Set intersect = setOperations.intersect("set1", "set2");System.out.println(intersect);//获取并集Set union = setOperations.union("set1", "set2");System.out.println(union);//删除元素setOperations.remove("set1", "a", "b");//获取元素个数Long size1 = setOperations.size("set1");System.out.println(size1);
}
操作有序集合类型的数据
/*** 操作有序集合类型的数据*/
@Test
public void testZset() {// zadd zrange zincrby zremZSetOperations zSetOperations = redisTemplate.opsForZSet();
// 添加zSetOperations.add("zset1", "a", 10);zSetOperations.add("zset1", "b", 12);zSetOperations.add("zset1", "c", 9);// 获取某个范围内的元素Set zset1 = zSetOperations.range("zset1", 0, -1);System.out.println(zset1);// 增加权重zSetOperations.incrementScore("zset1", "c", 10);// 删除zSetOperations.remove("zset1", "a", "b");
Set zset2 = zSetOperations.range("zset1", 0, -1);System.out.println(zset2);
}
通用命令操作
/*** 通用命令操作*/
@Test
public void testCommon() {// keys exists type det
// 获取所有的keySet keys = redisTemplate.keys("*");System.out.println(keys);
// 某个key是否存在Boolean name = redisTemplate.hasKey("name");Boolean set1 = redisTemplate.hasKey("set1");System.out.println(name);System.out.println(set1);
//查看key中value的类型for (Object key: keys){DataType type = redisTemplate.type(key);System.out.println(type);}
//删除keyredisTemplate.delete("mylist");
}