
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 |
mset mget | mset helo world java bast mget helo java | 一次性设置或获取多个值 |
del | del hello | 删除key=hello |
incr/decr | incr count decr count | key值自增/自减1 |
incrby/decrby | incrby count 99 decrby count 99 | 自增自减指定步长 |
Hash键值类型
- 用于存储结构化数据

命令 | 示例 | 说明 |
---|---|---|
hget | hget emp:1 age | 设置hash中age=23值 |
hset | hset emp:1 age 23 | 设置hash中age=23 |
hmset hmset hgetall | hmset emp:1 age 30 name kaka hmget emp:1 age name hgetall 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();
}
}
<!-- wp:preformatted -->
<pre class="wp-block-preformatted"> }</pre>
<!-- /wp:preformatted -->
<!-- wp:preformatted -->
<pre class="wp-block-preformatted"> 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();
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END