参考代码 https://github.com/zhang-xiaoxiang/redisdemo
首先熟悉一下redis的基本命令(来自网络收集)
1-String 字符串类型的增删改查:
###增加一个值key为name,value为ay
127.0.0.1:6379> set name 'ay'
OK
###查询name的值
127.0.0.1:6379> get name
"ay"
###更新name的值为al
127.0.0.1:6379> set name 'al'
OK
###查询name的值
127.0.0.1:6379> get name
"al"
###删除name的值
127.0.0.1:6379> del name
(integer) 1
###查询是否存在name,0代表不存在
127.0.0.1:6379> exists name
(integer) 0
127.0.0.1:6379>
2-List集合的增删改查:
List集合的增删改查:
###添加key为user_list,value为’ay’,’al’的list集合
127.0.0.1:6379> lpush user_list 'ay' 'al'
(integer) 2
###查询key为user_list的集合
127.0.0.1:6379> lrange user_list 0 -1
1) "al"
2) "ay"
###往list尾部添加love元素
127.0.0.1:6379> rpush user_list 'love'
(integer) 3
###往list头部添加hope元素
127.0.0.1:6379> lpush user_list 'hope'
(integer) 4
###查询key为user_list的集合
127.0.0.1:6379> lrange user_list 0 -1
1) "hope"
2) "al"
3) "ay"
4) "love"
###更新index为0的值
127.0.0.1:6379> lset user_list 0 'wish'
OK
###查询key为user_list的集合
127.0.0.1:6379> lrange user_list 0 -1
1) "wish"
2) "al"
3) "ay"
4) "love"
###删除index为0的值
127.0.0.1:6379> lrem user_list 0 'wish'
(integer) 1
###查询key为user_list的集合
127.0.0.1:6379> lrange user_list 0 -1
1) "al"
2) "ay"
3) "love"
127.0.0.1:6379>
3-Set集合的增删改查:
###添加key为user_set,value为"ay" "al" "love"的集合
127.0.0.1:6379> sadd user_set "ay" "al" "love"
(integer) 3
###查询key为user_set集合
127.0.0.1:6379> smembers user_set
1) "al"
2) "ay"
3) "love"
###删除value为love,返回1表示删除成功,0表示失败
127.0.0.1:6379> srem user_set 'love'
(integer) 1
###查询set集合所有值
127.0.0.1:6379> smembers user_set
1) "al"
2) "ay"
###添加love元素,set集合是没有顺序的,所以无法判断添加到那个位置
127.0.0.1:6379> sadd user_set 'love'
(integer) 1
###查询set集合所有值,发现添加到第二个位置
127.0.0.1:6379> smembers user_set
1) "al"
2) "love"
3) "ay"
###添加love元素,由于set集合已经存在,返回0代表添加不成功,但是不会报错
127.0.0.1:6379> sadd user_set 'love'
(integer) 0
3-Hash集合的增删改查:
###清除数据库
127.0.0.1:6379> flushdb
OK
###创建hash,key为user_hset,字段为user1,值为ay
127.0.0.1:6379> hset user_hset "user1" "ay"
(integer) 1
###往key为user_hset添加字段为user2,值为al
127.0.0.1:6379> hset user_hset "user2" "al"
(integer) 1
###查询user_hset字段长度
127.0.0.1:6379> hlen user_hset
(integer) 2
###查询user_hset所有字段
127.0.0.1:6379> hkeys user_hset
1) "user1"
2) "user2"
###查询user_hset所有值
127.0.0.1:6379> hvals user_hset
1) "ay"
2) "al"
###查询字段user1的值
127.0.0.1:6379> hget user_hset "user1"
"ay"
###获取key为user_hset所有的字段和值
127.0.0.1:6379> hgetall user_hset
1) "user1"
2) "ay"
3) "user2"
4) "al"
###更新字段user1的值为new_ay
127.0.0.1:6379> hset user_hset "user1" "new_ay"
(integer) 0
###更新字段user2的值为new_al
127.0.0.1:6379> hset user_hset "user2" "new_al"
(integer) 0
###获取key为user_hset所有的字段和值
127.0.0.1:6379> hgetall user_hset
1) "user1"
2) "new_ay"
3) "user2"
4) "new_al"
###删除字段user1和值
127.0.0.1:6379> hdel user_hset user1
(integer) 1
###获取key为user_hset所有的字段和值
127.0.0.1:6379> hgetall user_hset
1) "user2"
2) "new_al"
127.0.0.1:6379>
4-SortedSet集合的增删改查
###清除数据库
127.0.0.1:6379> flushdb
OK
###SortedSet集合添加ay元素,分数为1
127.0.0.1:6379> zadd user_zset 1 "ay"
(integer) 1
###SortedSet集合添加al元素,分数为2
127.0.0.1:6379> zadd user_zset 2 "al"
(integer) 1
###SortedSet集合添加love元素,分数为3
127.0.0.1:6379> zadd user_zset 3 "love"
(integer) 1
###按照分数由小到大查询user_zset集合元素
127.0.0.1:6379> zrange user_zset 0 -1
1) "ay"
2) "al"
3) "love"
###按照分数由大到小查询user_zset集合元素
127.0.0.1:6379> zrevrange user_zset 0 -1
1) "love"
2) "al"
3) "ay"
###查询元素ay的分数值
127.0.0.1:6379> zscore user_zset "ay"
"1"
###查询元素love的分数值
127.0.0.1:6379> zscore user_zset "love"
"3"
springboot2集成redis
首先添加依赖
<!--缓存redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
然后进行缓存配置(最基本配置,入门测试而已,哈哈)
### redis缓存配置
### 默认redis数据库为db0
spring.redis.database=0
### 服务器地址,默认为localhost
spring.redis.host=localhost
### 链接端口,默认为6379
spring.redis.port=6379
### redis密码默认为空
spring.redis.password=
先解决使用RedisTemplate存储至缓存数据乱码(redis客户端显示16进制的key和value或者干脆乱码),在一个包里写上这个配置类(相当于xml配置一个bean,spirngboot推荐的配置方式是java代码配置方式)
其实乱码问题也可以不用管它,因为它是序列化的结果,毕竟要在网络传输,但是为了直观,所以可以采取方式使得可读性增强,一般把key转为可读性强的,而value一般不需要(以免从redis读取时反而报String类型不能转换为对象的尴尬),一句话概括,乱码就乱码.
//package com.demo.redis.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* RedisConfig
* 配置序列化,解决客户端的16进制存储问题---配置序列化策略
* @author 10905 2019/2/24
* @version 1.0
*/
@Configuration
public class RedisConfig {
@Autowired
private RedisTemplate redisTemplate;
@Bean
public RedisTemplate<String, Object> stringSerializerRedisTemplate() {
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
return redisTemplate;
}
}
在再测试类写一个类测试一下(测试一个string内息,意思意思一下)
//package com.demo.redis;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTests {
/**
* 基本类型的模板
*/
@Resource
private RedisTemplate redisTemplate;
@Autowired
private StringRedisTemplate stringRedisTemplate;
/**
* 测试基本连接redis读取字符串数据 新增和查询
*/
@Test
public void test01() {
//增加
redisTemplate.opsForValue().set("name", "张晓祥");
redisTemplate.opsForValue().set("age", "18");
//增加(会覆盖前面的键值对)
redisTemplate.opsForValue().set("name", "张晓祥2号");
redisTemplate.opsForValue().set("age", "19");
//查询
String name = (String) redisTemplate.opsForValue().get("name");
String age = (String) redisTemplate.opsForValue().get("age");
System.out.println("查询到缓存数据: " + name + " " + age);
}
/**
* 删除
*/
@Test
public void test02() {
//删除键
Boolean flag = redisTemplate.delete("age");
if (flag) {
System.out.println("删除age成功");
} else {
System.out.println("删除age失败!");
}
}
/**
* 修改
*/
@Test
public void test03() {
//修改键
redisTemplate.opsForValue().set("name", "长草颜团子");
System.out.println("修改后的name是: " + redisTemplate.opsForValue().get("name"));
}
}
其他RedisTemplate中定义了对5种数据结构操作
redisTemplate.opsForList();//操作list
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForCluster();//集群时使用
redisTemplate.opsForGeo();//地理位置时使用
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set