“Redis:数据类型”的版本间差异

来自Wikioe
跳到导航 跳到搜索
→‎hash
第64行: 第64行:
=== string ===
=== string ===
字符串类型:字符串类型是Redis中最基本的数据类型;
字符串类型:字符串类型是Redis中最基本的数据类型;
: [[File:Redis-string.png|300px]]
* 它能存储任何形式的字符串,包括二进制数据,序列化后的数据,JSON化的对象甚至是一张图片。
* 它能存储任何形式的字符串,包括二进制数据,序列化后的数据,JSON化的对象甚至是一张图片。
: [[File:Redis-string.png|300px]]
 


{| class="wikitable"
{| class="wikitable"
! 命令 !! 说明
! 命令 !! 说明
|-
| '''get''' <key> || 获取 key 中设置的字符串值;
|-
|-
| '''set''' <key> <value> || 将字符串值 value 设置到 key 中;
| '''set''' <key> <value> || 将字符串值 value 设置到 key 中;
|-
|-
| '''get''' <key> || 获取 key 中设置的字符串值;
| '''setnx''' <key> <value> || setnx 是“set '''if not exists'''”的简写,如果key不存在,则设置值,存在则不设置值;
|-
|-
| '''setnx''' <key> <value> || setnx 是“set '''if not exists'''”的简写,如果key不存在,则设置值,存在则不设置值;
| '''mget''' <key> [<key>] || 获取所有(一个或多个)给定 key 的值
|-
|-
| '''mset''' <key> <value> [<key> <value>] || 同时设置一个或多个 key-value 对
| '''mset''' <key> <value> [<key> <value>] || 同时设置一个或多个 key-value 对
|-
| '''mget''' <key> [<key>] || 获取所有(一个或多个)给定 key 的值
|-
|-
| '''msetnx''' <key> <value> [<key> <value>] || 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在时才能设置成功,否则只要有一个key存在都会失败
| '''msetnx''' <key> <value> [<key> <value>] || 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在时才能设置成功,否则只要有一个key存在都会失败

2021年5月10日 (一) 00:35的版本


关于“key-value”

redis 以 key-value 存储数据,所有的操作均为对 key 的操作


“key”命令:

命令 说明
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 种数据类型:

数据类型 说明
string 字符串类型
hash 哈希类型
list 列表类型
set 集合类型
zset(sorted set) 有序集合类型

Redis 的 5 种数据类型

string

字符串类型:字符串类型是Redis中最基本的数据类型;

Redis-string.png
  • 它能存储任何形式的字符串,包括二进制数据,序列化后的数据,JSON化的对象甚至是一张图片。


命令 说明
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的映射表;

Redis-hash.png
  • hash特别适合用于存储对象
  • 每个 hash 可以存储 2^32 - 1 (40多亿)个键值对。


(命令前加了“h”,对“key”及“field(域)”和“value”操作)

命令 说明
hset <key> <field> <value> 将哈希表 key 中的域 field 的值设为 value
hget <key> <field> 获取哈希表 key 中给定域 field 的值
hgetall <key> 获取哈希表 key 中所有的域和值
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

列表类型:简单的字符串列表,按照插入顺序排序。

  • 可以添加一个元素导列表的头部(左边)或者尾部(右边);【???】
Redis-list.png

(命令前加了“l”,,对“key”和“value”操作,对元素进行类似于队列的操作)

命令 说明
lpush <key> <value> [<value>] 将一个或多个值 value 插入到列表 key 的表头(最左边)
rpush <key> <value> [<value>] 将一个或多个值 value 插入到列表 key 的表尾(最右边)
lrange <key> <start> <stop> 获取列表 key 中指定区间内的元素
  • 0 表示列表的第一个元素,以 1 表示列表的第二个元素, -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
lpop <key> 从左边获取列表 key 的一个元素,并将该元素移除
rpop <key> 从右边获取列表 key 的一个元素,并将该元素移除
lindex <key> <index> 获取列表 key 中下标为指定 index 的元素
llen <key> 获取列表 key 的长度
lrem <key> <count> <value> 从左到右删除列表中指定个数的“与指定value值相等的”value
ltrim <key> <start> <stop> 删除指定区域外的元素,比如LTRIM list 0 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除
rpoplpush <source> <destination> “RPOPLPUSH source destination”将列表 source 中的最后一个元素(尾元素)弹出插入到列表 destination ,作为 destination 列表的的头元素
lset <key> <index> <value> 将列表 key 下标为 index 的元素的值设置为 value
linsert <key> BEFORE|AFTER <pivot> <value> 将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置

set

集合类型:string类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据;

Redis-set.png

(命令前加了“s”,对“key”和“member”操作)

命令 说明
sadd <key> <member> [<member>] 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将不会再加入
smembers <key> 获取集合 key 中的所有成员元素
sismember <key> <member> 判断 member 元素是否是集合 key 的成员
scard <key> 获取集合里面的元素个数
srem <key> <member> [<member>] 删除集合 key 中的一个或多个 member 元素
srandmember <key> [count] 随机返回集合中的一个元素【???】
spop <key> [count] 随机从集合中删除一个元素
smove <source> <destination> <member> 将 member 元素从一个集合移动到另一个集合

zset(sorted set)

有序集合类型:(有序的set)不同的是zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。

Redis-zset.png

(命令前加了“z”,对“key”及“member”和“score”操作)

命令 说明
XX] [CH] [INCR] <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”)
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
    </dependency>
    
  • 使用jedis:
       public static void main(String[] args) {
          //连接Redis服务器
          Jedis jedis = new Jedis("192.168.1.103", 6379);
          //查看服务是否运行正常
          System.out.println("服务正在运行: " + jedis.ping());
       }