redis使用

redis的下载安装(windows版)

可以到redis的github上下载redis最新的发布版,github路径
https://github.com/MSOpenTech/redis

我的百度网盘中有Redis-x64-3.2.100.msi


安装过程和普通软件的安装一样,记住redis的默认端口是6379,
也可以在安装的过程中修改

redis的密码配置

redis默认是没有密码的,这样会有很大的安全风险,所以需要配置密码,密码的配置
也非常简单,在redis的安装目录下找到文件redis.windows-service.conf
,搜索requirepass,

#requirepass foobared


将注释去掉,就开启了密码验证,密码就是后面的字符串foobared,然后将密码
修改成我们自己的即可

redis服务的开启

在cmd中进入redis的安装目录,然后执行命令开启redis服务:

redis-server redis.windows.conf

看到下图即成功开启了redis服务

成功开启redis服务


然后新开一个cmd,进入redis安装目录,执行命令


redis-cli -h 127.0.0.1 -p 6379 -a your password

该命令会给出提示

redis 127.0.0.1:6379>

然后输入PING,如果输出PONG,说明连接成功,可对redis进行其他操作

redis中的数据结构



redis是一个key-value内存数据库,所以所有的数据都是以key-value
的形式存放在内存(或者磁盘)的

字符串的存取

set key value //设置key对应的value

set name loveabc 设置name的值为loveabc

可以使用get命令得到key对应的值

get name 返回值是loveabc

哈希值的存取

一个哈希值可对应多对键值对,可用于存放对象信息

hmset key field1 value1 [field2 value2…]

如存放一个有name,password与email的user对象

hmset user name loveabc password loveabcpassword email loveabc@github.com

使用hget key field 获取存储在指定键的哈希字段的值

hget user email 返回loveabc@github.com

hgetall key 获取key上的所有键值对

hgetall user 返回

name

loveabc

password

loveabcpassword

email

loveabc@github.com

列表的存取

lpush key value1 [value2 value3 …]存放多个值到列中

lpush course java redis mysql存放java,redis,mysql到列表course中

llen key 获取列表的长度

llen course 返回3

lrange key start end 从列表key中返回第start到第end的内容

lrange course 0 2 返回mysql redis java(从返回结果来看,这更像是栈stack)

无序集合的存取

无序集合里面的数据是无序且不重复的

sadd key member1 [member2 member2 …] 添加多个元素到无需集合key中

sadd member m1 m2 m1 存放m1,m2到无序集合member中

smembers key 得到无序集合key中的所有元素

smembers member 返回m1,m2(存放两个m1,单集合里面只有一个)

有序集合的存取

有序集合里面存储的是无重复但有权重的数据
zadd key score value [score1 value1 …] 存放多个值到有序集合中

zadd hot 100 java 50 php

zcard key 查看该集合中有多少元素

zcrad hot 返回2

zscore key value 返回集合key value的权重

zscore hot java 返回100

zrem key value 删除指定元素

zrem hot php 删除php

zrange key index1 index2 [withscores] 取数据,按照权重升序

zrevrange key index1 index 2 [withscores] 取数据,按照权重降序

zrange hot 0 -1

zremrangebyrank key index1 index2 按照序号删除数据

zremrangebyscore key minscore maxscore 按照分数删除

zrangebyscore key minscore maxscore 按照分数范围查找

zrangebyscore key minscore maxscore limit 0 2 按照分数范围查找并只取前两条

zincrby hot 5 php 为php的权重加5

zcount key minscore maxscore 计算min-max权重之间元素的个数

redis多数据库

一个redis支持16个数据库,使用select index可切换数据库,select 5 切换到第6个数据库

redis事务

rdis也支持事务处理,multi开启事务 exec提交事务 discard回滚事务

redis持久化

RDB方式,不需要配置,在指定的时间间隔内生成数据集的时间点快照
AOF方式,记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集

java使用jedis包操作redis数据库

首先引入Jedis所在的jar包

1
2
3
4
5
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>

java代码:

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
package com.imooc.redis;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.junit.Test;
import redis.clients.jedis.Jedis;
/*
* 使用Jedis对redis数据库进行基本的操作
*/
public class RedisHandle {
@Test
public void handleRedis() {
Jedis redis = null;
try {
// 使用ip与port构造Jedis对象
redis = new Jedis("127.0.0.1", 6379);
// 验证密码
redis.auth("foobaredpassword");
//set string
redis.set("email", "loveabc@github.com");
//set hash
Map<String,String> map=new HashMap<String,String>();
map.put("age", "25");
map.put("gender", "man");
redis.hmset("user", map);
//set list
redis.lpush("course", "python");
//set set
redis.sadd("member", "m3");
//get all keys
Set<String> keys=redis.keys("*");
for(String key:keys){
}
//get String
String name=redis.get("email");
//get List
List<String> courses=redis.lrange("course", 0, 5);
for(String c:courses){
}
//get list length
Long sum=redis.llen("course");
//get hash
String password=redis.hget("user", "password");
Map<String,String> user=redis.hgetAll("user");
Set<Entry<String,String>> allMap=user.entrySet();
for(Entry<String,String> entry:allMap){
}
//get set
Set<String> members=redis.smembers("member");
for(String m:members){
}
String type=redis.type("member");
//get type
System.out.println(type);
} finally {
//关闭连接,释放资源
if (redis != null) {
redis.close();
}
}
}
}

github路径:https://github.com/loveabc/redis-java.git

关于redis更多的操作命令与数据结构,可参考redis入门教程