简介
Redis是一个高性能的key-value数据库,支持数据的持久化。它可以用作数据库、缓存和消息中间件。优势如下:
- 性能高
- 数据类型丰富
- 原子操作
应用场景
Redis 的应用场景很多,举例如下:
- 热点数据缓存
- 限时任务处理
- 延时操作
- 分布式锁
- 排行榜
- 计数器
数据类型
redis支持的数据类型如下:
- 字符串
- 哈希
- 列表
- 集合
- 有序集合
字符串(string)
字符串由一对一的键值对构成。
SET name "hello" // 设置 key 为 name,value 为 "hello"
GET name // 获取 key 为 name 的值
DEL name // 删除 key
RENAME name // 重命名 key
EXISTS name // 检查 key 是否存在
STRLEN name // 返回字符串的长度
GETRANGE name 0 3 // 获取指定序号范围内的子串
SETNX name "world" // 只有当 key 不存在时设置 key 的值
哈希(hash)
redis 的 hash 是一张 field 和 value 的映射表,即一个哈希具有多个键值对的映射。
HMSET student name "tom" age 20 // 哈希名为 student,具有 name 和 age 两个字段
HGETALL student // 获取该哈希的所有字段
HGET student name // 获取 name 字段的值
HDEL student name // 删除 name 字段
HLEN student // 返回哈希中字段的数量
HSETNX student name "Jack" // 只有当哈希的该字段不存在时设置值
HVALS student // 获取哈希中所有的值
列表(list)
列表由多个元素组成。
LPUSH studentName "Tom"
LPUSH studentName "Jack"
LPUSH studentName "Don"
LINDEX studentName 0 // 获取序号为 0 的元素,序号范围为 0 ~ len-1
LPOP studentName // 取出并移除第一个元素,即序号为 0 的元素RPOP studentName // 取出并移除最后一个元素,命令中的 L 和 R 可看作是列表的左和右。
LRANGE studentName 0 3 // 获取序号在 [0, 3] 内的元素
集合(set)
Set 是字符串的无序集合,集合中的元素唯一,不能重复。
SADD country "cn"
SADD country "us"
SMEMBERS country // 获取集合中的所有元素
SPOP country // 移除并返回集合中的一个随机元素
SREM country "cn" // 移除集合中的元素,不存在则会被忽略
SCARD country // 获取集合中成员的数量
有序集合(sorted set)
有序集合中的元素也是不能重复的,但对于每一个元素,有一个对应的 double 分数,redis 通过该分数进行排序。
ZADD country 100 "cn"
ZADD country 200 "us"
ZRANGE country 0 1 // 根据序号获取数据
ZCOUNT country 0 2 // 计算在有序集合中指定区间分数的成员数
ZRANK country “cn” // 返回元素的分数排名,从小到大排列
ZREVRANK country "cn" // 返回元素的分数排名,从大到小排列
ZSCORE country "cn" // 返回元素的分数值
Jedis 简单使用
Java 中通过 Jedis 类进行 redis 的操作,以下为简单使用代码:
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("Connection to server sucessfully");
//查看服务是否运行
System.out.println("Server is running: "+jedis.ping());
// 字符串
jedis.set("name", "tom");
System.out.println(jedis.get("tom"));
// 列表
jedis.lpush("country", "cn");
jedis.lpush("country", "usa");
jedis.lpush("country", "uk");
List<String> list = jedis.lrange("country", 0, 2);
for (String country: list) {
System.out.println(country);
}