查看“Redis:数据类型”的源代码
←
Redis:数据类型
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Redis]] == 关于“key-value” == redis 以 key-value 存储数据,'''所有的操作均为对 key 的操作'''。 “key”命令: {| class="wikitable" ! 命令 !! 说明 |- | '''keys pattern''' || 查找所有符合给定模式( pattern)的 key 。如“keys *”:列出所有的key; |- | '''type''' <key> || 查看 key 所储存的值的类型 |- | '''exists''' <key> || 检查某个key是否存在 |- | '''random''' <key> || 从当前数据库中随机返回一个 key 。 |- | '''rename''' <key> <newkey> || 修改 key 的名称为 newkey |- | '''renamenx''' <key> <newkey> || 修改 key 的名称为 newkey (仅当 newkey 不存在时)。 |- | '''move''' <key> '''db''' || 将当前库的 key 移动到给定的库db中,比如:“move k1 2” |- | '''del''' <key> || 删除 key |- | '''scan cursor''' [MATCH pattern] [COUNT count] || 迭代数据库中的数据库键【???】 |- | '''dump''' <key> || 序列化给定 key ,并返回被序列化的值。【???】 |- | '''expire''' <key> '''seconds''' || 设置 key 的值的过期时间,以秒计。 |- | '''expireat''' <key> '''timestamp''' || 设置 key 的值的过期时间,时间参数是 UNIX 时间戳(unix timestamp)。 |- | '''pexpire''' <key> '''milliseconds''' || 设置 key 的过期时间,以毫秒计。 |- | '''pexpireat''' <key> '''milliseconds-timestamp''' || 设置 key 过期时间的时间戳(unix timestamp) ,以毫秒计。 |- | '''presist''' <key> || 移除 key 的过期时间,key 将持久保持。 |- | '''ttl''' <key> || 以秒为单位,返回给定 key 的剩余生存时间:-1 永不过期,-2 已过期或 key 不存在。ttl(time to live) |- | '''pyyl''' <key> || 以毫秒为单位,返回 key 的剩余的过期时间。 |} “value”包括 5 种数据类型: {| class="wikitable" ! 数据类型 !! 说明 |- | string || 字符串类型 |- | hash || 哈希类型 |- | list || 列表类型 |- | set || 集合类型 |- | zset(sorted set) || 有序集合类型 |} == Redis 的 5 种数据类型 == === string === 字符串类型:字符串类型是Redis中最基本的数据类型; : [[File:Redis-string.png|300px]] * 它能存储任何形式的字符串,包括二进制数据,序列化后的数据,JSON化的对象甚至是一张图片。 {| class="wikitable" ! 命令 !! 说明 |- | '''get''' <key> || 获取 key 中设置的字符串值; |- | '''set''' <key> <value> || 将字符串值 value 设置到 key 中; |- | '''setnx''' <key> <value> || setnx 是“set '''if not exists'''”的简写,如果key不存在,则设置值,存在则不设置值; |- | '''mget''' <key> [<key>] || 获取所有(一个或多个)给定 key 的值 |- | '''mset''' <key> <value> [<key> <value>] || 同时设置一个或多个 key-value 对 |- | '''msetnx''' <key> <value> [<key> <value>] || 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在时才能设置成功,否则只要有一个key存在都会失败 |- | '''getrange''' <key> <start> <end> || 获取 key 中字符串值从 start 开始 到 end 结束 的子字符串; |- | '''setrange''' <key> <offset> <value> || 从指定的位置开始将 key 的值替换为新的字符串; |- | '''getbit''' <key> offset || 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。 |- | '''setbit''' <key> offset <value> || 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。 |- | '''setex''' <key> <seconds> <value> || “'''set expire'''”的简写,设置 key 的值 ,并将 key 的生存时间设为 seconds (以秒为单位) ; |- | '''psetex''' <key> milliseconds <value> || 这个命令和 setex 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 setex 命令那样,以秒为单位。 |- | '''getset''' <key> <value> || 设置 key 的值为 value ,并返回 key 的旧值; |- | '''strlen''' <key> || 返回 key 所储存的字符串值的长度; |- | '''append''' <key> <value> || 如果 key 存在且是字符串, 则将 value 追加到 key 原来旧值的末尾; * 如果 key 不存在, 则将key 设置值为 value; |- | '''incr''' <key> || 将 key 中储存的数字值加 1; * 如果 key 不存在,则 key 的值先被初始化为 0 再执行 INCR 操作; * (只能对数字类型的数据操作,否则:“'''(error) ERR value is not an integer or out of range'''”); |- | '''decr''' <key> || 将 key 中储存的数字值减 1; * (同上); |- | '''incrby''' <key> <increment> || 将 key 所储存的值加上增量值; * 如果 key 不存在,则 key 的值先被初始化为 0 再执行 INCRBY 命令; |- | '''decrby''' <key> <decrement> || 将 key 所储存的值减去减量值; * 如果 key 不存在,则 key 的值先被初始化为 0 再执行 DECRBY 命令; |} === hash === 哈希类型:是一个string类型的field和value的映射表; : [[File:Redis-hash.png|400px]] * hash特别适合用于'''存储对象'''。 * 每个 hash 可以存储 2^32 - 1 (40多亿)个键值对。 (命令前加了“'''h'''”,对“key”及“'''field'''(域)”和“value”操作) {| class="wikitable" ! 命令 !! 说明 |- | '''hget''' <key> <field> || 获取哈希表 key 中给定域 field 的值 |- | '''hgetall''' <key> || 获取哈希表 key 中所有的域和值 |- | '''hset''' <key> <field> <value> || 将哈希表 key 中的域 field 的值设为 value |- | '''hsetnx''' <key> <field> <value> || 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在的时候才设置,否则不设置 |- | '''hmset''' <key> <field> <value> [<field> <value>] || 同时将多个 field-value (域-值)对设置到哈希表 key 中 |- | '''hmget''' <key> <field> [<field>] || 获取哈希表 key 中一个或多个给定域的值 |- | '''hkeys''' <key> || 查看哈希表 key 中的所有 field 域 |- | '''hvals''' <key> || 查看哈希表 key 中所有域的值 |- | '''hexists''' <key> <field> || 查看哈希表 key 中,给定域 field 是否存在 |- | '''hlen''' <key> || 获取哈希表 key 中域 field 的个数 |- | '''hdel''' <key> <field> [<field>] || 删除哈希表 key 中的一个或多个指定域 field |- | '''hincrby''' <key> <field> <increment> || 为哈希表 key 中的域 field 的值加上增量 increment |- | '''hincrbyfloat''' <key> <field> <increment> || 为哈希表 key 中的域 field 加上浮点数增量 increment |- | '''hscan''' <key> cursor [MATCH pattern] [COUNT count] || 迭代哈希表中的键值对【???】 |} === list === 列表类型:简单的字符串列表,按照'''插入顺序'''排序。 : [[File:Redis-list.png|400px]] * 可以添加一个元素导列表的头部(左边)或者尾部(右边);【???】 * 一个列表最多可以包含 2^32 - 1 (40多亿)个元素。 (命令前加了“'''l'''”,,对“key”和“value”操作,对元素进行类似于队列的操作) {| class="wikitable" ! 命令 !! 说明 |- | '''lpop''' <key> || 从左边获取列表 key 的一个元素,并将该元素移除 |- | '''rpop''' <key> || 从右边获取列表 key 的一个元素,并将该元素移除 |- | '''lpush''' <key> <value> [<value>] || 将一个或多个值 value 插入到列表 key 的'''表头'''(最左边) |- | '''rpush''' <key> <value> [<value>] || 将一个或多个值 value 插入到列表 key 的'''表尾'''(最右边) |- | '''lpushx''' <key> <value> || 将一个值插入到已存在的列表头部 |- | '''rpushx''' <key> <value> || 为已存在的列表添加值 |- | '''blpop''' <key> [<key>] timeout || 移出并获取列表的第一个元素,如果列表没有元素会'''阻塞'''列表直到等待超时或发现可弹出元素为止。 |- | '''brpop''' <key> [<key>] timeout || 移出并获取列表的最后一个元素,如果列表没有元素会'''阻塞'''列表直到等待超时或发现可弹出元素为止。 |- | '''rpoplpush''' <nowiki><source> <destination></nowiki> || 将列表 source 中的最后一个元素(尾元素)弹出插入到目标列表(destination),作为目标列表的的头元素 |- | '''brpoplpush''' <nowiki><source> <destination></nowiki> timeout || 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会'''阻塞'''列表直到等待超时或发现可弹出元素为止。 |- | '''llen''' <key> || 获取列表 key 的长度 |- | '''lindex''' <key> <index> || 获取列表 key 中下标为指定 index 的元素 |- | '''lset''' <key> <index> <value> || 将列表 key 下标为 index 的元素的值设置为 value |- | '''linsert''' <key> <nowiki>BEFORE|AFTER</nowiki> <pivot> <value> || 将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置 |- | '''lrange''' <key> <start> <stop> || 获取列表 key 中指定区间内的元素 * 0 表示列表的第一个元素,以 1 表示列表的第二个元素, -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 |- | '''lrem''' <key> <count> <value> || 从左到右删除列表中指定个数(count)的“与指定value值相等的”value |- | '''ltrim''' <key> <start> <stop> || 删除指定区域外的元素,比如“LTRIM list 0 2” ,表示只保留列表 list 的前三个元素,其余元素全部删除 |} === set === 集合类型:string类型的无序集合,集合成员是唯一的,即集合中'''不能出现重复的数据'''; : [[File:Redis-set.png|400px]] * Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 * 集合中最大的成员数为 2^32 - 1 (40多亿)。 (命令前加了“'''s'''”,对“key”和“'''member'''”操作) {| class="wikitable" ! 命令 !! 说明 |- | '''sadd''' <key> <member> [<member>] || 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将不会再加入 |- | '''scard''' <key> || 获取集合里面的元素个数 |- | '''sdiff''' <key> [<key>] || 返回第一个集合与其他集合之间的差异。 |- | '''sdiffstore''' <destination> <key> [<key>] || 返回给定所有集合的差集并存储在 destination 中 |- | '''sinter''' <key> [<key>] || 返回给定所有集合的交集 |- | '''sinterstore''' <destination> <key> [<key>] || 返回给定所有集合的交集并存储在 destination 中 |- | '''sunion''' <key> [key2] || 返回所有给定集合的并集 |- | '''sunionstore''' <destination> <key> [<key>] || 所有给定集合的并集存储在 destination 集合中 |- | '''smembers''' <key> || 获取集合 key 中的所有成员元素 |- | '''sismember''' <key> <member> || 判断 member 元素是否是集合 key 的成员 |- | '''srandmember''' <key> [count]|| 随机返回集合中的一个元素 |- | '''spop''' <key> [count] || 随机从集合中删除一个元素 |- | '''srem''' <key> <member> [<member>] || 删除集合 key 中的一个或多个 member 元素 |- | '''smove''' <nowiki><source> <destination></nowiki> <member> || 将 member 元素从一个集合移动到另一个集合 |- | '''sscan''' <key> cursor [MATCH pattern] [COUNT count] || 迭代集合中的元素【???】 |} === zset(sorted set)=== 有序集合类型:(有序的set)不同的是 zset 的每个元素都会关联一个分数(分数可以重复),redis 通过分数来为集合中的成员进行从小到大的排序。 : [[File:Redis-zset.png|400px]] * 有序集合的成员是唯一的,但分数(score)却可以重复。 * 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32 - 1 (40多亿)。 (命令前加了“'''z'''”,对“key”及“'''member'''”和“'''score'''”操作) {| class="wikitable" ! 命令 !! 说明 |- | '''zadd''' <key> <nowiki>[NX|XX] [CH] [INCR]</nowiki> <score> <member> [<score> <member>] || 将一个或多个 member 元素及其 score 值加入到有序集合 key 中 |- | '''zrem''' <key> <member> [<member>] || 删除有序集合 key 中的一个或多个成员 |- | '''zcard''' <key> || 获取有序集 key 的元素成员的个数 |- | '''zrank''' <key> <member> || 获取有序集 key 中成员 member 的排名,有序集成员按 score 值从小到大顺序排列 |- | '''zrevrank''' <key> <member> || 获取有序集 key 中成员 member 的排名,有序集成员按 score 值从大到小顺序排列 |- | '''zrangebyscore''' <key> <min> <max> [WITHSCORES] [LIMIT offset count] || 获取有序集 key 中,所有 score 值介于 min 和 max 之间的成员【有啥区别】 |- | '''zrevrangebyscore''' <key> <min> <max> [WITHSCORES] [LIMIT offset count] || 获取有序集 key 中, score 值介于 max 和 min 之间的所有的成员【有啥区别】 |- | '''zcount''' <key> <min> <max> || 获取有序集 key 中,所有 score 值介于 min 和 max 之间的成员的个数 |- | '''zrange''' <key> <start> <stop> [WITHSCORES] || 获取有序集 key 中,指定区间内的成员,按 score 值从小到大排列【?】 |- | '''zrevrange''' <key> <start> <stop> [WITHSCORES] || 获取有序集 key 中,指定区间内的成员,按 score 值从大到小排列【?】 |} == Java 操作 redis == * jedis的jar包依赖Maven配置:(jedis也依赖“Apache Commons Pool 2 2.0”) *:<syntaxhighlight lang="xml"> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> </syntaxhighlight> * 使用jedis: *:<syntaxhighlight lang="java"> public static void main(String[] args) { //连接Redis服务器 Jedis jedis = new Jedis("192.168.1.103", 6379); //查看服务是否运行正常 System.out.println("服务正在运行: " + jedis.ping()); } </syntaxhighlight>
返回至“
Redis:数据类型
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息