一.Redis概述
1.概述:Redis是一个基于内存的key-vaule结构数据库
2.特点:
a.基于内存存储,读写性能高
b.适合存储热点数据(热点新闻,咨询)
c.企业应用广泛
3.安装:window,linux两个版本,傻瓜式安装
4.启动
服务端:redis-server.exe redis.windows.conf
客户端:redis-cli.exe
redis-cli.exe -h localhost -p 6379
二.Redis数据类型
5种常用的数据类型
- 字符串 string
- 哈希 hash
- 列表 list
- 集合 set
- 有序集合 sorted set
三.Redis常用命令
- 字符串操作命令
SET key value 设置指定key的值
GET key 获取指定key的值
SETEX key seconds value 设置指定key的值,并将key的过期时间设置为seconds秒
SETNX key value 只有key不存在时设置key的值
- 哈希操作命令
HSET key field value 将哈希表key的字段filed的值设置为value
HGET key field 获取哈希表中指定的字段
HDEL key field 删除哈希表中指定的字段
HKEYS key 获取哈希表中所有的字段
HVALS key 获取哈希表的所有的值
- 列表操作命令
LPUSH key value1[value2] 将一个或者多个值插入列表的头部
LRANGE key start stop 获取列表指定范围内的元素
RPOP key 移除并获取列表最后一个元素
LLEM 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] 通过索引区间返回有序集合中指定区间的成员
ZINGCRBY key increment member 有序集合中对指定成员的分数上加入增量increment
ZREM key memberp[member...] 移除有序集合中的一个或者多个成员
- 通用命令
KEYS pattern 查找所有符合给定模式的key
EXISTS key 检查给定的key是否存在
TYPE key 返回key所存储的值的类型
DEL key key存在时删除key
四.在java中操作Redis
Redis的java客户端
Jedis
Lettuce
Spring Data Redis是Spring的一部分,对redis进行高度封装Spring Data Redis的使用方式:
1.导入Spring Data Redis的maven坐标
2.配置Redis数据源
3.编写配置类,创建RedisTemplate对象
4.通过RedisTemplate对象操作Redisspring:redis:host: ${sky.redis.host}port: ${sky.redis.port}database: ${sky.redis.database}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;}
}
package com.sky.test;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;@SpringBootTest
public class springboottest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void test() {System.out.println(redisTemplate);ValueOperations ValueOperations = redisTemplate.opsForValue();HashOperations HashOperations = redisTemplate.opsForHash();ListOperations ListOperations = redisTemplate.opsForList();SetOperations SetOperations = redisTemplate.opsForSet();ZSetOperations ZSetOperations = redisTemplate.opsForZSet();}/*** 操作字符串的数据*/@Testpublic void testString(){//set get setex setnxredisTemplate.opsForValue().set("city","北京");System.out.println(redisTemplate.opsForValue().get("city"));redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);redisTemplate.opsForValue().setIfAbsent("lock","1");}/*** 操作哈希类型的数据*/@Testpublic 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);Set keys =HashOperations.keys("100");System.out.println(keys);List value = HashOperations.values("100");System.out.println(value);HashOperations.delete("100","name");}/*** 操作列表类型的数据*/@Testpublic void testList(){ListOperations listOperations = redisTemplate.opsForList();listOperations.leftPushAll("mylist","a","b","c");listOperations.leftPush("mylist","d");List mlist = listOperations.range("mylist", 0, -1);System.out.println(mlist);listOperations.rightPop("mylist");Long size = listOperations.size("mylist");System.out.println(size);}/*** 操作集合类型的数据*/@Testpublic void testSet(){SetOperations setOperations = redisTemplate.opsForSet();setOperations.add("myset","a","b","c");setOperations.add("myset2","a","d");Set mset = setOperations.members("myset");System.out.println(mset);Long size = setOperations.size("myset");System.out.println(size);Set intersect = setOperations.intersect("myset","myset2");System.out.println(intersect);Set union = setOperations.union("myset","myset2");System.out.println(union);}/*** 操作有序集合类型的数据*/@Testpublic void testZset(){ZSetOperations zSetOperations = redisTemplate.opsForZSet();zSetOperations.add("zset1","a",10);zSetOperations.add("zset1","b",20);zSetOperations.add("zset1","c",30);Set zset = zSetOperations.range("zset1", 0, -1);System.out.println(zset);zSetOperations.incrementScore("zset1","b",30);zSetOperations.remove("zset1","a");Set zset2 = zSetOperations.range("zset1", 0, -1);System.out.println(zset2);}/*** 操作通用命令*/@Testpublic void testcommon(){Set keys = redisTemplate.keys("*");System.out.println(keys);Boolean name = redisTemplate.hasKey("name");Boolean age = redisTemplate.hasKey("set1");for (Object key : keys) {DataType type = redisTemplate.type(key);System.out.println(type.name());}redisTemplate.delete("mylist");}
}