1.作用和场景
Redis 支持多种数据类型,每种数据类型都有不同的场景和作用,下面是 Redis 中常见的数据类型及其适用场景和作用:
-
字符串类型(String):
- 场景:适用于存储各种类型的值,包括文本、数字、二进制数据等。
- 作用:常用于缓存、计数器、计时器、分布式锁等。
-
列表类型(List):
- 场景:适用于需要保留多个有序元素的场景,允许重复元素。
- 作用:常用于实现消息队列、任务队列、最新消息列表等。
-
集合类型(Set):
- 场景:适用于存储一组唯一的无序元素,不允许重复元素。
- 作用:常用于对元素进行去重、判断某个元素是否存在、快速获取随机元素等。
-
有序集合类型(Sorted Set):
- 场景:适用于存储一组唯一且有序的元素,每个元素都关联一个分数(score),通过分数进行排序。
- 作用:常用于排行榜、优先级队列、范围查询等。
-
哈希类型(Hash):
- 场景:适用于存储键值对集合,其中每个键都是唯一的。
- 作用:常用于存储对象、用户信息、配置信息等,可以方便地进行单个字段的读写操作。
-
HyperLogLog 类型:
- 场景:适用于高效地进行基数统计(估计集合中不重复元素的数量)。
- 作用:常用于统计活跃用户数、独立 IP 计数等。
-
地理空间类型(Geo):
- 场景:适用于存储地理位置信息,并支持对位置进行距离计算和范围查询。
- 作用:常用于实现附近的人、附近的店铺等功能。
2.命令行使用方法
下面是 Redis 中各个数据类型的命令行操作方法的示例:
-
字符串类型(String):
- 设置值:
SET key value - 获取值:
GET key
- 设置值:
-
列表类型(List):
- 在列表尾部插入元素:
RPUSH key value - 在列表头部插入元素:
LPUSH key value - 获取列表范围内的元素:
LRANGE key start stop
- 在列表尾部插入元素:
-
集合类型(Set):
- 添加元素:
SADD key member - 移除元素:
SREM key member - 获取集合中的所有元素:
SMEMBERS key
- 添加元素:
-
有序集合类型(Sorted Set):
- 添加元素:
ZADD key score member - 移除元素:
ZREM key member - 获取有序集合范围内的元素:
ZRANGE key start stop
- 添加元素:
-
哈希类型(Hash):
- 设置字段值:
HSET key field value - 获取字段值:
HGET key field - 获取哈希中所有字段和值:
HGETALL key
- 设置字段值:
-
HyperLogLog 类型:
- 添加元素:
PFADD key element - 统计基数:
PFCOUNT key
- 添加元素:
-
地理空间类型(Geo):
- 添加地理位置:
GEOADD key longitude latitude member - 获取地理位置距离:
GEODIST key member1 member2 [unit] - 查询附近的位置:
GEORADIUS key longitude latitude radius [unit]
- 添加地理位置:
3.java客户端使用方法
- 字符串类型(String)
// 引入依赖:jedis
import redis.clients.jedis.Jedis;
// 设置值
Jedis jedis = new Jedis("localhost", 6379);
jedis.set("key", "value");
// 获取值
String value = jedis.get("key");
- 列表类型(List)
// 在列表尾部插入元素
jedis.rpush("list", "element1");
// 在列表头部插入元素
jedis.lpush("list", "element2");
// 获取列表范围内的元素
List<String> elements = jedis.lrange("list", 0, -1);
- 集合类型(Set)
// 添加元素
jedis.sadd("set", "member1");
// 移除元素
jedis.srem("set", "member1");
// 获取集合中的所有元素
Set<String> members = jedis.smembers("set");
- 有序集合类型(Sorted Set)
// 添加元素
jedis.zadd("sortedSet", 1.0, "member1");
// 移除元素
jedis.zrem("sortedSet", "member1");
// 获取有序集合范围内的元素
Set<String> members = jedis.zrange("sortedSet", 0, -1);
- 哈希类型(Hash)
// 设置字段值
jedis.hset("hash", "field", "value");
// 获取字段值
String value = jedis.hget("hash", "field");
// 获取哈希中所有字段和值
Map<String, String> allFields = jedis.hgetAll("hash");