Redis期末复习

本文最后更新于:2023年3月23日 上午

之前的SpringBoot期末复习中多包含了Redis和SpringCloud的知识点,现在划分开来方便复习

Redis(1简答、2-3选择、4编程)

1、是什么,特点,优势

(1)是什么

  • redis是一个开源的、使用C语言编写的、可基于内存也可持久化的Key-Value数据库,最常用的NoSQL数据库没有之一。
  • NoSQL: not only sql 不仅仅是sql 高性能开发
  • c语言开发:支持多语言 java、php、python、c#、object-c、js…..

(2)特点

  • 内存数据库,速度快,也支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持集群与数据备份,即master-slave模式的数据备份。
  • 支持事务

(3)优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制形式的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。(事务:要么同时成功,要么同时回滚)
  • 丰富的特性 – Redis还支持 publish/subscribe(发布/订阅)以实现读写分离, 通知, key 过期等等特性。

2、数据类型;String、List、Hash

(1)String

string是redis最基本的类型。一个key对应一个value。
单键 —— 单值
String实例
在以上实例中我们使用了 Redis 的 SET 和 GET 命令。键为 name,对应的值为redis.net.cn。注意:一个键最大能存储512MB。

(2)List

Redis列表是简单的字符串列表,按照插入顺序排序。你可以从头部(左边)或者尾部(右边)添加一个元素导列表。
单键——多值
常用案例:聊天系统、社交网络中获取用户最新发表的帖子、简单的消息队列、新闻的分页列表、博客的评论系统。
List实例

(3)Hash

hash 是一个键值(key=>value)对集合。
KV模式不变,但是V是一个键值对(适合用来存java中的对象数据)
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。可以避免序列化的开销和并发修改控制的问题。
Hash实例
以上实例中 hash 数据类型存储了包含用户脚本信息的用户对象。 实例中我们使用了 Redis HMSET, HGETALL 命令,user:1 为键值。

3、常用命令:set、get、incr、lpush、lpop、hset、hmset

set key value设置指定 key 的值[如果有键,则自动覆盖]
get key 获取指定 key 的值
del key 删除指定key
getset key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
incr key : 将键的整数值增一【只有数字才能进行加减】
decr key: 将键的整数值减少-1
INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 。
LPUSH key value1 [value2] 将一个或多个值插入到列表头部
RPUSH key value1 [value2] 在列表中添加一个或多个值
LPOP key 移出并获取列表的第一个元素
RPOP key 移除并获取列表最后一个元素
hset key field value (field相当于类的属性)将哈希表 key 中的字段 field 的值设为 value
hget key field 获取存储在哈希表中指定字段的值
hmset key field1 value1 [field2 value2 ]同时将多个 field-value (域-值)对设置到哈希表 key 中。
hmget key field1[field2] 获取所有给定哈希字段的值

4、基于jedis驱动的java redis API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
1.在pom.xml中配置依赖:
redis.clients
jedis
2.创建一个redis连接:

//也可以使用连接池

Jedis jedis=new Jedis("127.0.0.1", 6379);

3.写入一个字符串String;

jedis.set("key1", "string-value1");

String value1 = jedis.get("key1");

//设置key的时间 单位秒

jedis.expire("key1", 60);

// 打印string-value1

System.out.println(value1);

// key不存在则返回 null

System.out.println(jedis.get("key1"));

4.写入一个hash:

HashMap hashMap = new HashMap();

hashMap.put("name", "zhang-");

hashMap.put("age", "36");

jedis.hmset("user", hashMap);

jedis.expire("user", 20);

//获取按map中的key来获取数据,得到一个list

List hmget = jedis.hmget("user", "name", "age");

System.out.println(hmget);

//判断hashMap中是否存在某个字段

Boolean isExist = jedis.hexists("user", "name");

System.out.println(isExist);

//删除某个字段

jedis.hdel("user", "name");

//获取整个hashMap

Map map = jedis.hgetAll("user");

System.out.println(map);

5.写入一个list(列表)

// 在头部写入数据,列表数据是 [name2, name1]

jedis.lpush("user1", "name1", "name2");

// 在尾部写入数据,列表数据是[name1, name2]

jedis.rpush("user1", "name1", "name2");

// 按索引来获取数据

jedis.lindex("key", 1);

// 获取列表的长度

long length = jedis.llen("user2");

System.out.println(length);

6.无序set操作:

// 创建一个set

jedis.sadd("set1", "value1");

jedis.sadd("set1", "value2");

jedis.sadd("set1", "value3");

// 获取整个set

Set set1 = jedis.smembers("set1");

// 移出某个value

jedis.srem("set1", "value2");

// 判断是否存在该value

boolean sismember = jedis.sismember("set1", "value2");

7.有序set操作:

// 有序set

jedis.zadd("set2", 1, "value1");

jedis.zadd("set2", 10, "value10");

jedis.zadd("set2", 11, "value11");

jedis.zadd("set2", 9, "value9");

jedis.zadd("set2", 5, "value5");

// 获取set的长度

Long set21 = jedis.zcard("set2");

System.out.println(set21);

// 获取set的片段

Set set2 = jedis.zrange("set2", 0, 10);

System.out.println(set2);

Redis期末复习
https://moechun.fun/2023/01/01/Redis期末复习/
作者
Knight Kilito
发布于
2023年1月1日
更新于
2023年3月23日
许可协议