一、redis数据类型

 1.1、介绍

1.2、redis储存类型中value的五种常用数据类型

二、redis常用命令

        也就是说我们再操作mysql数据库的时候,我们select * from
table1命令,就是查询table1表中的所有数据的命令,同理我们这里的redis常用命令,也是操作redis数据库的一些命令。

为了方便练习,我们就在windows客户端进行操作这些命令(毕竟windows系统直接点击打开服务端和客户端就可以进行操作了)

2.1、value为字符串string类型操作命令

也就是说redis储存类型为(key,字符串)格式的时候一些命令操作:

 

2.2、value为哈希操作命令

也就是说redis储存类型:key,value类型,此value为哈希结构。

2.3、value为list集合操作命令

也就是说redis储存类型:key,value类型,此value为list集合结构。

一个一个命令分析如下所示:

第一个命令:(注意:添加的时候可以元素相同,比如集合中添加了a、b、c、d那么我们还可与往里面添加a,最终成了a、a、b、c、d形式在集合中)

 第二个命令:(0到-1就表示把key对应的value集合里面的数据全部查询出来)

注意:是从集合的最后一个开始依次查询出来的。

第三个命令:移除并获取列表最后一个元素

 第四个命令:获取列表长度

第五个命令:移除并获取列表的最后一个元素,如果该list列表中没有元素了,那么就会阻塞列表直接列表中有了新的元素即可

特点:就是当list1集合中一个元素都没有的时候,还想再移除元素的时候,就会发生5s(设定的时间)的阻塞状态。

2.4、value为集合set操作命令

特点:无序不可重复、

 第一个命令:向集合中添加一个或多个元素

 第二个命令:获取集合的元素个数

 第三个命令:返回给定所有集合的交集

 第四个命令:返回所有给定集合的并集

        和上面的返回交集其实是一样的,交集只不过是返回的两个key对应的集合元素相同的部分元素,而并集就是:
假如第一个集合中有a、b、c元素,第二个集合中有a、b、c、f、e元素,那么获取的这两个集合的并集元素就是a、b、c、e、f

第五个命令:返回给定所有集合的差集

 第六个命令:移除集合中一个或多个元素

2.5、有序集合sorted set操作命令

 总的来说就是:这个redis的key,value类型,其实这个value还是set类型,不过是有分数的而已,不多说演示如下所示:

第一个命令:向有序集合添加一个或多个元素

 我们查询集合中的元素的时候,还可以加上whthscores,那么就可以把各查询出来的元素对应的分数也一起显示出来:

 第二个命令:对集合中指定的元素分数进行增量

 第三个命令:移除集合中的一个或多个元素

三、Redis通用命令

 

四、在java中操作rides

通过 spring data redis 进行操作。

 

4.1、 操作value为String类型的数据

通过spring data redis 操作redis步骤如下所示:

第一步:导入坐标 (注:springboot工程)

 

第二步:配置连接redis属性

 解释属性中的一些配置:

其实我们的redis数据库中,redis是默认开启16个数据库的,演示如下所示:

 因此我们yml文件中 database:0 就是说我们所有的操作(比如对redis
数据库中进行储存数据,删除数据的一些命令操作)都是在0标对应的数据库中完成的,也就是说是在默认的16个数据库中的第一个数据库中进行操作的。如果设定database:
1 那么就表示用的是第二个数据库进行操作命令的。

还有一些配置都是可以在redis.windows.conf配置文件中查询到的:

 

第三步:自动装配RedisTemplate对象,自动装配获取到该RedisTemplate对象后,就可以通过该对象拿到下面的五个接口对象,然后进行一些命令操作了(如果拿的是ValueOperations接口对象,那么就能操作key,value类型的命令【我们知道redis的value有五种类型方式,ValueOperations接口对象对应的就是字符串类型,同理其余四个接口对象也各自对应自己的类型方式】)

 

然后我们在redis服务端就可以通过查看一下是否set上数据了:

 

解决RedisTemplate对象序列化问题,配置代码如下所示:

 

 

总结value类型为String的命令在java中对应的代码方法:

也就是说这些下面的命令,用java代码如何实现:

 上面四个命令对应的java代码写法如下所示:
@Test public void String(){ // 通过RedisTemplate对象拿到ValueOperations接口对象 //
拿到后就可以操作一些key,value类型方式的命令了 注:value为字符串类型 ValueOperations ops =
redisTemplate.opsForValue(); /** * 1、对应的命令: SET key value 设置指定key的值 */
ops.set("usernanme789","junker"); // 向redis数据库中set储存
key为username,value为junker的数据 /** * 2、对应的命令: GET key 获取指定key的值 *
(我们知道上面已经存入到redis数据库中了一个key为usernanme789,value为junker的数据了, *
因此我们可以通过key:usernanme789获取value) */ Object o = ops.get("usernanme789");
System.out.println(o); // junker /** * 3、对应的命令: SETEX key seconds value
设置指定key的值,并将key的过期时间设为seconds秒 */ ops.set("key1","hahhaa",10l,
TimeUnit.SECONDS); // TimeUnit.SECONDS 表示秒,也就是10s // 还可以.天、月、年 /** * 4、SETNX
key value 只有在key不存在时设置key的值 */ Boolean aBoolean =
ops.setIfAbsent("usernanme789", "hahaha"); System.out.println(aBoolean); //
false (为false的原因是因为usernanme789的key在redis数据库中已经存在了) }

4.2、操作value为Hash类型的数据

同理和上面的那个大差不差,还是通过RedisTemplate对象获取接口对象而已,只不过这次获取的接口对象是HashOperations接口对象了(专门操作value类型为哈希命令的对象)。

 这几个命令对应的java代码中写法如下所示:
@Autowired private RedisTemplate redisTemplate; // 自动装配获得RedisTemplate对象 @Test
public void Hash(){ // 通过RedisTemplate对象获取到HashOperations接口对象 HashOperations
ops = redisTemplate.opsForHash(); /** * 对应的命令:HSET key field value :
将哈希表key中的字段field字段的值设为value */ ops.put("hashkey1","name","junker");
ops.put("hashkey1","addr","zz"); ops.put("hashkey1","age","20"); /** *
对应的命令:HGET key field :获取存储在哈希表中指定字段的值 */ Object o = ops.get("hashkey1",
"name"); // 获取key为hashkey1,value为哈希类型的name对应的value值 System.out.println(o); /**
* 对应的命令:HDEL key field :删除存储在哈希表中的指定字段 */ ops.delete("hashkey1","age"); /** *
对应的命令:HKEYS key :获取value为哈希表中的所有字段数据 */ Set keys = ops.keys("hashkey1"); for
(Object data:keys) { System.out.println(data); // addr name } /** * 对应的命令:HVALS
key : 获取哈希表中所有值 */ List values = ops.values("hashkey1"); for (Object
data:values) { System.out.println(data); } }

4.3、操作value为list集合类型的数据

同理和上面的那个大差不差,还是通过RedisTemplate对象获取接口对象而已,只不过这次获取的接口对象是ListOperations接口对象了(专门操作value为list集合命令的对象)。

 上面的几个命令对应的java代码写法如下所示:
@Autowired private RedisTemplate redisTemplate; // 自动装配获得RedisTemplate对象 @Test
public void List(){ // 通过RedisTemplate对象获取到ListOperations接口对象 ListOperations
ops = redisTemplate.opsForList(); /** * 对应的命令:LPUSH key value1 [value2] :
将一个或多个值插入到list集合列表当中 */ ops.leftPush("listkey1","a"); //
注意:这个leftPush方法只能一次向list集合中储存一个元素值 // ops.leftPushAll("listkey1","b","c","d");
// 这个方法可以一次性向list集合中储存多个元素值 /** * 对应的命令:LRANGE key start stop :
也就是说获取value中list集合列表中的元素 */ List list = ops.range("listkey1", 0, -1); //
0到-1表示查询list集合中的所有元素 for (Object data : list) { System.out.println(data); //
依次输出 d、c、b、a (和用命令的时候查询出来的顺序是一样的。) } /** * 对应的命令:LLEN key : 获取列表长度
(也就是说假如list集合列表中有5个元素,那么对应的列表长度就应该是5) */ Long size = ops.size("listkey1");
System.out.println(size); /** * 对应的命令:BRPOP key1 [key2 ] timeout
:移除并获取列表的最后一个元素,如果该list列表中没有元素了, * 那么就会阻塞列表直到列表中有了新的元素即可,阻塞多久是可以设定的。 */ Object
o = ops.rightPop("listkey1"); System.out.println(o); }

4.4、操作value为set集合类型的数据(无序的set)

同理和上面的那个大差不差,还是通过RedisTemplate对象获取接口对象而已,只不过这次获取的接口对象是SetOperations接口对象了(专门操作value为set集合命令的对象)。

上面的几个命令对应的java代码写法如下所示: 
@Autowired private RedisTemplate redisTemplate; // 自动装配获得RedisTemplate对象
@Test public void Set(){ // 通过RedisTemplate对象获取到SetOperations接口对象 SetOperations
ops = redisTemplate.opsForSet(); /** * 命令: SADD key member1 [member2]
:向set集合中添加一个或多个元素 */ ops.add("setkey1","a","b","c","d","a"); //
注意:当向set集合中储存已经有的元素比如a时,那么这个a就会把有的那个a元素数据覆盖掉 (也就是说不可重复) /** * 命令: SMEMBERS key
: 获取set集合中所有的元素 */ Set set = ops.members("setkey1"); for (Object data : set) {
System.out.println(data); } /** * 命令: SREM key member1 [member2]
:删除set集合中一个或多个元素 */ ops.remove("setkey1","a","b"); }

4.5、操作value为set集合类型的数据(有序的set)

同理和上面的那个大差不差,还是通过RedisTemplate对象获取接口对象而已,只不过这次获取的接口对象是ZSetOperations接口对象了(专门操作value为set集合命令的对象
注意:该set集合是有序集合)。

上面的几个命令使用java代码的写法如下所示:
@Autowired private RedisTemplate redisTemplate; // 自动装配获得RedisTemplate对象
@Test public void ZSet(){ // 通过RedisTemplate对象获取到ZSetOperations接口对象
ZSetOperations ops = redisTemplate.opsForZSet(); /** * 命令: ZADD key score1
member1 [score2 member2] :向有序set集合中添加一个或多个元素(每个元素都关联着一个double类型的分数) */
ops.add("zsetkey1","a",10.0); // 注意分数写成double类型 ops.add("zsetkey1","b",9.0);
ops.add("zsetkey1","c",9.5); /** * 命令: ZRANGE key start stop [WITHSCORES]
:获取集合中的元素 */ Set set = ops.range("zsetkey1", 0, -1); for (Object data : set) {
System.out.println(data); // 注意:获取出来的元素是按照元素对应的分数从小到大排序列出来的 } /** * 命令:ZINCRBY
key increment member :为集合中的元素增加分数 */ ops.incrementScore("zsetkey1","a",60.0);
// 为 a元素增加60分 }
 

4.6、操作一些通用的命令(也就是value五种类型通用的命令)

上面的几个通用命令对应的java代码写法如下所示:
@Autowired private RedisTemplate redisTemplate; // 自动装配获得RedisTemplate对象
@Test public void A(){ /** * 命令: KEYS pattern :通常 pattern为*
表示查看redis数据库中所有的key值 */ Set set = redisTemplate.keys("*"); for (Object data :
set) { System.out.println(data); } /** * 命令: EXISTS key :
检查指定的key是否在redis数据库中已经存在 */ Boolean key = redisTemplate.hasKey("key123456");
System.out.println(key); // 如果在redis数据库中没有key123456的key,那么就返回false /** * 命令:
TYPE key :
返回key所储存的value值的数据类型(比如说是string类型的value呢,还是哈希类型的value呢....反正就是那五种value类型) */
DataType type = redisTemplate.type("setkey1"); System.out.println(type.name());
// 把value类型的名字给我拿出来(如果value类型是String类型,那么就输出String, 如果value是哈希类型,那么就返回hash....)
}
 

技术
今日推荐
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信