1.基于内存存储,读写性能高
2.适合存储热点数据(热点商品,资讯,新闻)
3.企业应用广泛
Redis和MySQL是两种不同类型的数据库,各有其适用的场景和优势。
数据存储方式:
数据持久性:
数据查询:
数据一致性:
在实际应用中,也可以将Redis和MySQL结合起来使用,充分发挥它们各自的优势。例如,可以将热门数据缓存到Redis中,减轻MySQL的压力,提高系统的整体性能和响应速度。
1.安装包下载地址:https://github.com/microsoftarchive/redis/releases
2.下载解压后,在当前目录进入命令行模式(cmd)下,
3.输入 redis-server.exe redis.windows.conf连接服务
指定连接哪个设备(图中是localhost)的端口(图中是6379)的redis的服务
1.打开redis.windows.conf文件并修改以下内容:requirepass xxxx(xxxx就是要修改的密码)
2.再次登录在后面用 - a 参数填写密码:
介绍:Redis存储的是key-value结构的数据,其中key是字符串类型,value有5中常用的数据类型(字符串string,哈希hash,列表list,集合set,有序集合sorted set / zset)
普通字符串,Redis中最简单的数据类型
(存储 Session 信息、存储缓存信息(如详情页的缓存)、 存储整数信息,可使用 incr 实现整数+1,和使用 decr 实现整数 -1;)
也叫散列,类似于Java中的HashMap结构key-{(field1 value1),(field2 value2)}
(存储 Session 信息、存储商品的购物车,购物车非常适合 用哈希字典表示,使用人员唯一编号作为字典的 key,value 值可以存储商品的 id 和数量等信息、 存储详情页信息;)
按照插入顺序排序,可以由重复元素,类似于Java中的LinketList(简单的字符串列表,按照插入顺序排序)key--->value{a-b-c-d}
(实现简单的消息队列、存储某项列表数据;)
string类型的无序集合,没有重复元素,类似于Java中的HashSet
(关注功能,比如关注我的人和我关注的人,使用集合存储,可以保证人员不会重复;)
string类型元素的集合,没有重复元素,每个元素关联一个double类型的分数(score),根据分数升序排序
(可以用来存储排名信息、关注列表功能,这样就可以根据关注实现排序展示)
SET key value:设置指定key的值
GET key:获取指定key的值
SEREX 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]:将一个或多个值插入到列表头部(对应也有从右边插入rpush)
LRANGE key start stop:获取列表指定范围内的元素(从0开始,-1代表列表尾部)
RPOP key:移除并获取列表最后一个元素(对应也有移除并获取列表第一个元素lpop)
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 increment member:有序集合中对指定成员的分数加上增量increment
ZREM key member [member ...]:移除有序集合中的一个或多个成员
KEYS pattern:查找所有符合给定模式(pattern)的key
EXISTS key:检查给定key是否存在
TYPE key:返回key所储存的值的类型
DEL key:该命令用于在key存在时删除key
/**
* 操作字符串类型的数据
*/
@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");
}
/**
* 操作hash类型的数据
*/
@Test
public void testHash(){
//hset hget hdel hkeys hvals
HashOperations 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 values = hashOperations.values("100");
System.out.println(values);
hashOperations.delete("100","age");
}
/**
* 操作列表类型的数据
*/
@Test
public void testList(){
//lpush lrange rpop llen
ListOperations listOperations = redisTemplate.opsForList();
listOperations.leftPushAll("mylist","a","b","c");
listOperations.leftPush("mylist","d");
List mylist = listOperations.range("mylist", 0, -1);
System.out.println(mylist);
listOperations.rightPop("mylist");
Long size = listOperations.size("mylist");
System.out.println(size);
}
/**
* 操作集合类型的数据
*/
@Test
public void testSet(){
//sadd smembers scard sinter sunion srem
SetOperations setOperations = redisTemplate.opsForSet();
setOperations.add("set1","a","b","c","d");
setOperations.add("set2","a","b","x","y");
Set members = setOperations.members("set1");
System.out.println(members);
Long size = setOperations.size("set1");
System.out.println(size);
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");
}
/**
* 操作有序集合类型的数据
*/
@Test
public void testZset(){
//zadd zrange zincrby zrem
ZSetOperations 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");
}
/**
* 通用命令操作
*/
@Test
public void testCommon(){
//keys exists type del
Set keys = redisTemplate.keys("*");
System.out.println(keys);
Boolean name = redisTemplate.hasKey("name");
Boolean set1 = redisTemplate.hasKey("set1");
for (Object key : keys) {
DataType type = redisTemplate.type(key);
System.out.println(type.name());
}
redisTemplate.delete("mylist");
}