数据类型
- string(字符串)
- hash(哈希, 类似 java 里的 Map)
- list(列表)
- set(集合)
- zset(sorted set: 有序集合)
6. 基数
String(字符串)
string 是 Redis 最基本的类型, 你可以理解成与 Memcached 一模一样的类型, 一个 key 对应一个 value.
string 类型是二进制安全的. 意思是 Redis 的 string 可以包含任何数据. 比如 jpg 图片或者序列化的对象 .
string 类型是 Redis 最基本的数据类型, 一个 Redis 中字符串 value 最多可以是 512M
Hash(哈希)
Redis hash 是一个键值对集合.
Redis hash 是一个 string 类型的 field 和 value 的映射表, hash 特别适合用于存储对象.
类似 Java 里面的 Map<String,Object>
List(列表)
Redis 列表是简单的字符串列表, 按照插入顺序排序. 你可以添加一个元素导列表的头部 (左边) 或者尾部(右边)
它的底层实际是个链表
Set(集合)
Redis 的 Set 是 string 类型的无序集合. 它是通过 HashTable 实现实现的
zset(sorted set: 有序集合)
Redis zset 和 set 一样也是 string 类型元素的集合, 且不允许重复的成员.
不同的是每个元素都会关联一个 double 类型的分数.
Redis 正是通过分数来为集合中的成员进行从小到大的排序. zset 的成员是唯一的, 但分数 (score) 却可以重复.
命令地址: http://redisdoc.com/
Redis 键(key)
1. keys *
2. exists key 的名字, 判断某个 key 是否存在
3. move key db --->当前库就没有了, 被移除了
4. expire key 秒钟: 为给定的 key 设置过期时间
5. ttl key 查看还有多少秒过期,-1 表示永不过期,-2 表示已过期, 即已被删除
6. type key 查看你的 key 是什么类型
String 类型:
字符串是 Redis 的最基本额数据结构, 以一个键和一个值存储在 Redis 内部
类似 java 的 Map 结构, 通过键去找值
基本命令:
支持简单运算的命令:
下面是代码的测试流程:
getrange/setrange
getrange: 获取指定区间范围内的值, 类似 between......and 的关系从零到负一表示全部, 默认从 0 开始
0 -1: 代表全部
setrange 设置指定区间范围内的值, 格式是 setrange key 值 具体值
即修改原来字符串额值从某个位置开始
setex(set with expire)键秒值 / setnx(set if not exist)
setex: 设置带过期时间的 key, 动态设置.
setex 键 秒值 真实值
setnx: 只有在 key 不存在时设置 key 的值.
mset/mget/msetnx
mset: 同时设置一个或多个 key-value 对.
mget: 获取所有 (一个或多个) 给定 key 的值.
msetnx: 同时设置一个或多个 key-value 对, 当且仅当所有给定 key 都不存在.
否则不生效
链表 List
链表结构是 Redis 中一个常用的结构, 它可以存储多个字符串, 而且它是有序的
Redis 链表是双向的,
使用链表结构就意味着读性能的丧失
链表只能从 个方向中去遍历所要节点
优势: 在于插入和删除的便利
链表的数据节点是分配在不同的内存域的, 并不连续
由此可见, 链表结构的使用是需要注意场景的, 对于那些经常需要对数据进行插入和
删除的列表数据使用它是十分方便的, 因为它可以在不移动其他节点的情况下完成插入和
删除. 而对于需要经常查找的, 使用它性能并不佳, 它只能从左到右或者从右到左的查找
和比对.
lpush/rpush/lrange
lpush: 从链表的左边插入
rpush: 从链表的右边插入
lrange : 查看链表的节点值
lrange list start end end=-1 代表全部
lpop/rpop
lpop: 删除左边的第一个节点, 并且将其返回
rpop: 删除右边第一个节点, 并且将其返回
lindex, 按照索引下标获得元素(从上到下)
lindex: lindex key index, 索引从零开始
通过索引获取列表中的元素
llen
求链表的长度, 返回长度
lrem key 删 N 个 value
* 从 left 往 right 删除 2 个值等于 v1 的元素, 返回的值为实际删除的数量
* LREM list3 0 值, 表示删除全部给定的值. 零个就是全部值
lrem list 个数 节点值
ltrim key 开始 index 结束 index, 截取指定范围的值后再赋值给 key
ltrim: 截取指定索引区间的元素, 格式是 ltrim list 的 key 起始索引 结束索引
[start end] 开区间 会把截取的内容保存在原来的 list 中, 默认截取位置从 0 开始
rpoplpush 源列表 目的列表
移除列表的最后一个元素, 并将该元素添加到另一个列表并返回
移除源列表的最后一个元素并且将其左插到目的列表中
lset key index value
给 index 出的索引修改值
linsert key before/after 值 1 值 2
在值 1 前面 / 后面 插入值 2
它是一个字符串链表, left,right 都可以插入添加;
如果键不存在, 创建新的链表;
如果键已存在, 新增内容;
如果值全移除, 对应的键也就消失了.
链表的操作无论是头和尾效率都极高, 但假如是对中间元素进行操作, 效率就很惨淡了.
链表的命令都是进程不安全的,
Red is 提供了链表的阻塞命令, 它 在运行的时候 会给链表加锁, 以保
证操作链表的命令安全性,
来源: https://www.cnblogs.com/Mrchengs/p/10047880.html