本文是Redis的基本使用,进阶使用可以查看Redis中文网
Redis windows版本下载
https://github.com/MSOpenTech/redis/releases
服务安装
redis-server.exe --service-install --service-name redis6380 redis.windows.conf --loglevel verbose --port 6380
redis-server.exe --service-install --service-name redis6379 redis.windows.conf --loglevel verbose --port 6379
服务卸载
redis-server.exe --service-uninstall --service-name redis6380
连接服务端
redis-cli.exe -h 127.0.0.1 -p 6380
端口修改
打开redis.windows.conf,将6379改为6380
主从设置
1、打开redis.windows.conf,修改# slaveof <masterip> <masterport>为slaveof 127.0.0.1 6379
2、命令行连接服务端后,slaveof 127.0.0.1 6379
3、saveof no one可以从slave变为master
默认情况下,slave是只读模式,可以修改slave-read-only yes为slave-read-only no
中文乱码
Redis客户端默认不转义中文,我们需要在打开客户端时,命令后面加--raw
redis-cli.exe --raw
Redis 数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
这五种类型,各自都有很多命令来对数据进行操作,本文仅简单示范。
1、string
string 类型是 Redis 最基本的数据类型,一个key对应一个value,string 类型的值最大能存储 512MB。
127.0.0.1:6379> set name "test"
OK
127.0.0.1:6379> get name
test
2、hash
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。每个 hash 可以存储 232 -1 键值对(40多亿)
127.0.0.1:6379> hmset user name "zhangsan" age 20
OK
127.0.0.1:6379> hget user name
zhangsan
127.0.0.1:6379> hget user age
20
3、list
list是一个字符串链表,最多可存储 2的32次方 - 1 元素 (4294967295, 每个列表可存储40多亿)
127.0.0.1:6379> lpush nameList "zhangsan"
1
127.0.0.1:6379> lpush nameList lisi
2
127.0.0.1:6379> lpush nameList wangwu
3
127.0.0.1:6379> lrange nameList 0 10
wangwu
lisi
zhangsan
4、set
set是string类型的无序集合,不能有重复值,集合中最大的成员数为 2的32次方 - 1(4294967295, 每个集合可存储40多亿个成员)。
127.0.0.1:6379> sadd nameSet zhangsan
1
127.0.0.1:6379> sadd nameSet lisi
1
127.0.0.1:6379> sadd nameSet wangwu
1
127.0.0.1:6379> smembers nameSet
lisi
wangwu
zhangsan
127.0.0.1:6379> sadd nameSet wangwu
0
5、zset
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
127.0.0.1:6379> zadd nameZSet 0 zhangsan
1
127.0.0.1:6379> zadd nameZSet 1 lisi
1
127.0.0.1:6379> zadd nameZSet 2 wangwu
1
127.0.0.1:6379> zadd nameZSet 1 zhaoliu
1
127.0.0.1:6379> zrangebyscore nameZSet 0 1000
zhangsan
lisi
zhaoliu
wangwu
Java客户端
1、Jedis
添加Jedis包依赖:
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.2.0</version>
</dependency>
Jedis redis = new Jedis("localhost");
System.out.println(redis.ping());
redis.incr("id");
System.out.println(redis.get("id"));
Map<String,String> user = new HashMap<String,String>();
user.put("name","张三");
user.put("age","30");
redis.hmset("user", user);
System.out.println(redis.hget("user","name"));
redis.lpush("list","1","2","3");
List<String> list = redis.lrange("list",0,10);
for(int i = 0;i < list.size();i ++){
System.out.println(list.get(i));
}
2、Spring Boot
添加依赖:
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
然后就可以在java代码里对redis进行操作了,当然,我们还可以写个工具类,对StringRedisTemplate的方法进行封装,调用更简单一些。
@Autowired
private StringRedisTemplate template;
@RequestMapping("/")
public String hello(){
template.opsForValue().set("spring","boot");
System.out.println(template.opsForValue().get("spring"));
return "hello!";
}