Redis 基础
官方文档
什么是 redis ?
docker 运行 redis
数据类型(常用)
1. Strings
常用命令:
- 设置值: set mykey value [...]
- 获取值: get mykey
应用场景:
- 分布式锁
2. Lists
- 是简单的字符串列表,按插入顺序排序
- 一个 list 的大小,最大可以有 2^32 - 1 个元素(即 4,294,967,295 个元素的大小限制)【官网: lpush + ltrim 操作可以突破这一限制】
- 可以头部插入(on the left),也可以尾部插入(on the right)
特性:
常用命令:
-
头部插入: lpush mykey [element]
-
尾部插入: rpush mykey [element]
-
范围查询左边起: lrange mykey startIndex stopIndex
- stopIndex 为 -1,表示从 startIndex 起查询全部
-
头部弹出: lpop mykey [count]
-
尾部弹出: rpop mykey [count]
-
删除lists ?
list 高级玩法
应用场景:
- 在社交网络中建模时间轴,使用LPUSH在用户时间线上添加新元素,使用LRANGE检索最近插入的一些项目
- 把 list 当做消息中间件的 队列,即list 成了 消息队列(生产者往 list 的一端加入消息,消息者从 list 的另一端取出消息来消费)
3. Sets
特性:
常用命令:
-
插入元素: sadd mykey [element]
-
查看全部元素: smembers mykey
-
随机查看元素: srandmember mykey [count]
-
移动元素: smove mykey1 mykey1 [element]
-
弹出元素: spop mykey [count]
应用场景:
4. Hashes
- 是字符串 field 和字符串 value 的 map(映射)
- 一个 hash 的大小,最大可以有 2^32 - 1 个 key-value
特性:
- 节省空间
- 主要用来表示对象,但因 hash 能存储许多元素,也可以做更多事情
常用命令:
-
创建&设置field-value: hset key [field-value]
-
创建&设置多个field-value: hmset key [field-value]
-
判断一个hash的field是否存在: hexists key [field]
-
移除一个或多个field: hdel key [field]
应用场景:
- 存储对象数据,像java的 Map 一样
5. Sorted Sets
特性:
- 增/删/改所耗费的时间与元素数量的对数成正比
- 访问 sorted set 中部的元素的速度是很快的
常用命令:
应用场景:
- 大型游戏排名榜(根据分数来排的)【更新分数快】 zadd
- 检索顶级用户,并返回排名(根据分数来排)【查询快】 zrange & zrank
- Sorted Sets通常用于索引存储在Redis内部的数据 【当索引来用】 zrangebyscore
redis key 的维护
模糊查询 key
符号 * -- 模糊匹配
符号 ? -- 占位匹配
符号 [] -- in 匹配
-- 查询所有 key
> keys *
-- 查询包含 keyword 的 key
> keys *keyword*
-- 占位匹配
> keys keywo??
-- 包含字符匹配
> keys keywor[dxy]
批量删除 key
jedis方式
// 定义匹配key
String pattern = "keywor*"
// 获取匹配到的key集合
Set<String> keys = jedis.keys(pattern);
// 执行删除
jedis.del(keys.toArray(new String[keys.size()]));