Redis快速入门
Redis介绍
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
Linux>Redis安装
# 进入/usr/local/目录 创建 redis目录
$ cd /usr/local/
$ mkdir redis
$ cd redis/
# 下载Redis压缩包 https://redis.io/download/#redis-downloads
$ wget https://download.redis.io/releases/redis-5.0.14.tar.gz
# 解压Redis & 进入Redis目录
$ tar zxf redis-5.0.14.tar.gz
$ cd redis-5.0.14
# 编译Redis
$ make
Windows>Redis安装
下载安装包并解压,运行redis-server redis.windows.conf
Redis守护进程
| 配置项 | 示例 | 说明 |
|---|---|---|
daemonize |
daemonize yes |
是否启用后台运行默认no |
port |
port 6379 |
设置端口号默认6379 |
logfile |
logfile日志文件 |
设置日志文件 |
databases |
databases 255 |
设置redis数据库总量 |
dir |
dir数据文件目录 |
设置数据文件存储目录 |
requirepass |
requirepass 12345 |
设置使用密码 |
# 进入Redis配置文件
$ vim redis.fonf
# 跳转130行 修改daemonize no 为daemonize yes
$ daemonize yes
# 运行Redis
$ ./src/redis-server redis.conf
# 结束Redis
$ netstat -tulpn
$ kill -9 "RedisPID" # 或./src/redis-cli shutdown
Redis通用命令
| 命令 | 示例 | 说明 |
|---|---|---|
select |
select 0 |
选择0号数据库 |
set |
set name lily |
设置key=name,value=lily |
get |
get hello |
获得key=hello结果 |
keys |
keys he* |
根据Pattern表达式查询符合条件的Key |
dbsize |
dbsize |
返回key的总数 |
exists |
exists a |
检查key=a是否存在 |
del |
del a |
删除key=a的数据 |
expire |
expire hello 20 |
设置key= hello 20秒后过期 |
ttl |
ttl hello |
查看key = a的过期剩余时间 |
Redis数据类型
| 类型 | 说明 |
|---|---|
String |
字符串类型 |
Hash |
Hash类型 |
List |
列表类型 |
Set |
集合类型 |
Zset |
有序集合类型 |
字符串常用命令
| 命令 | 示例 | 说明 |
|---|---|---|
get |
get hello |
获取key=hello的结果 |
set |
set hello world |
值key=hello,value=world |
msetmget |
mset helo world java bastmget helo java |
一次性设置或获取多个值 |
del |
del hello |
删除key=hello |
incr/decr |
incr countdecr count |
key值自增/自减1 |
incrby/decrby |
incrby count 99decrby count 99 |
自增自减指定步长 |
Hash键值类型
- 用于存储结构化数据

| 命令 | 示例 | 说明 |
|---|---|---|
hget |
hget emp:1 age |
设置hash中age=23值 |
hset |
hset emp:1 age 23 |
设置hash中age=23 |
hmsethmsethgetall |
hmset emp:1 age 30 name kakahmget emp:1 age namehgetall emp:1 |
hgetall emp:1 获取hash多个值 获取hash所有值 |
hdel |
hdel emp:1 age |
删除emp:1的age |
hexists |
hexists emp:1 name |
检查是否存在 |
hlen |
hlen emp:1 |
获取指定长度 |
List列表类型
- 一系列字符串的“数组”,按插入顺序排序
List命令
rpush listkey c b a 右侧插入
lpush listket f e d 左侧插入

rpop listkey 右侧弹出
lpop listkey 左侧弹出

lrange listkey 0(开始) -1(末尾) 查看list里的数据
Set与Zset集合类型
Set集合是字符串的无序集合,集合成员是唯一的
$ sadd key value # 添加集合
$ smembers key # 查看集合所有成员
$ sinter key1 key2 # 把两个集合中的相同元素列出来
$ sunion key1 key2 # 吧两个集合中的元素合并在一起并且去重
$ sdiff key1 key2 # 在key1中有,key2没有的元素列出
Zset集合是字符串的有序集合,集合成员是唯一的
$ zadd key 100 value # 添加有序元素
$ zrange key start stop # 查看元素
$ zrangebyscore key min max # 查看范围内的元素(列:100-103以内的元素)
String
Java中使用Redis
- Jedis是Java语言开发的Redis客户端工具包
- Jedis是对Redis命令的封装,掌握Redis命令便可轻易上手
$ bind 0.0.0.0 #生产模式下不建议使用0.0.0.0作为连接ip
$ protected-mode no #关闭保护模式
String
public class JedisTestor {
public static void main(String[] args) {
Jedis jedis = new Jedis("106.12.145.20", 6379);
try {
jedis.select(5);
System.out.println("Redis连接成功");
//设置字符串
jedis.set("ceshi", "ceshi1");
String ceshi = jedis.get("ceshi");
System.out.println(ceshi);
//设置多个值
jedis.mset(new String[]{"age", "18", "sex", "男"});
//获取多个值
List<String> mget = jedis.mget("ceshi", "age", "sex");
System.out.println(mget);
//age 自增1
Long age = jedis.incr("age");
System.out.println(age);
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
}
}
Hash
public class JedisTestorOne {
public static void main(String[] args) {
Jedis jedis = new Jedis("106.12.145.20", 6379);
//Hash
try {
jedis.select(1);
//设置Hash
jedis.hset("stu:1", "name", "小明");
//获取指定Hash
String name = jedis.hget("stu:1", "name");
System.out.println(name);
Map<String,String> map = new HashMap();
map.put("name","小红");
map.put("age","18");
map.put("sex","女");
jedis.hmset("stu:2", map);
Map<String, String> stringStringMap = jedis.hgetAll("stu:2");
System.out.println(stringStringMap);
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
}
}
List
public class JedisTestorTwo {
public static void main(String[] args) {
Jedis jedis = new Jedis("106.12.145.20", 6379);
//List
try {
jedis.select(6);
jedis.del("letter");
//(右侧)尾部添加字符
jedis.rpush("letter", new String[]{"A", "B", "C"});
//(左侧)头部部添加字符
jedis.lpush("letter", new String[]{"D", "E", "F"});
//lrange letter 0(开始) -1(末尾)
List<String> letter = jedis.lrange("letter", 0, -1);
//左侧最后元素弹出
jedis.lpop("letter");
//右侧最后元素弹出
jedis.rpop("letter");
//重新赋值
letter = jedis.lrange("letter", 0, -1);
System.out.println(letter);
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
}
}
Jedis缓存数据
//通过初始化存储数据
public CacheSample() {
Jedis jedis = new Jedis("106.12.145.20",6379);
try {
List<Goods> goodsList = new ArrayList<Goods>();
goodsList.add(new Goods(110, "香蕉", "大香蕉", 25f));
goodsList.add(new Goods(111, "红富士苹果", "苹果", 3.5f));
goodsList.add(new Goods(112, "蒙牛纯牛奶", "牛奶", 7f));
jedis.select(10);
for (Goods goods : goodsList) {
String json = JSON.toJSONString(goods);
System.out.println(json);
String key = "goods:" + goods.getGoodsId();
jedis.set(key, json);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
}
public static void main(String[] args) {
new CacheSample();
Jedis jedis = new Jedis("106.12.145.20");
try {
jedis.select(10);
String goodsId = new Scanner(System.in).next();
String key = "goods:" + goodsId;
if (jedis.exists(key)) {
String json = jedis.get(key);
System.out.println(json);
//调用parseObject方法传入JSON字符串和类
Goods goods = JSON.parseObject(json, Goods.class);
System.out.println(goods.getGoodsName());
System.out.println(goods.getGoodsId());
} else {
System.out.println("您查找的数据不存在!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
}

浙公网安备 33010602011771号