Linux运维数据库篇 redis数据类型汇总
Posted 鹧鸪鹄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维数据库篇 redis数据类型汇总相关的知识,希望对你有一定的参考价值。
一、string类型
String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等
1 append
向一个key追加values 如果该key不存在 就创建这个key并添加values
redis-cli
exists xox
append xox v1
get xox
2 set
创建一个键并给他一个值 如果值为字符串要将双引号或者单引号
set k2 '000'
get k2
3 strlen
获取一个键的长度
strlen key
strlen k2
4 incr decr incrby decrby
用于自增和自减 也可以整数自增和自检
incr k1 自增1
decr k1 自减1
incrby k1 10 整数自增
decrby k1 10 整数自减
get k1
del k1 删除键
keys *
incr k1 可以用来建立一个键 默认的值为1
5 getset
获取计数器原有值的同时,并将其设置为新值,这两个操作原子性的同时完成
incrby k1 10
getset k1 1
get k1
6 setex
指定一个key过期时间
get k1
setex k1 20 'kiki' 设置20秒过期
ttl k1 检测周期
192.168.30.10:6379> ttl k1
(integer) 7 表示还有7秒1过期
192.168.30.10:6379> ttl k1
(integer) -2 此时已经过期
setex k1 'kiki' 设置永久
192.168.30.10:6379> ttl k1
(integer) -1 表示永不过期
7 setnx
创建指定键,若该键存在则不执行,不存在则执行
setnx k3 100 k3原本不存在 现在创建 值为100
(integer) 1
setnx k3 100 键存在就不会执行
(integer) 0
192.168.30.10:6379> get k3 查看值任然为100
"100"
8 mset、mget、msetnx
mset批量设置键值 mget批量获取键值 msetnx批量设置键值 存在则不执行
192.168.30.10:6379> mset k4 120 k5 200
OK 批量设置键值
192.168.30.10:6379> mget k4 k5 批量获取
1) "120"
2) "200"
192.168.30.10:6379> msetnx k2 100 k3 110
(integer) 0 批量执行 如果键存在 则不执行
二、list数据类型
列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素
1 lpush lpushx lrange
lpush 该命令会创建该键及与其关联的List,之后在将参数中的values从左到右依次插入到表头
lpushx 该命令仅当key存在时,将value值插入表头
lrange 返回列表中指定区间内的元素,0表示第一个元素,1表示第二个元素
192.168.30.10:6379> lpush a2 1 2 3 4
(integer) 4 创建a2的键 值从表头插入
192.168.30.10:6379> lrange a2 0 -1 打印表的所有数值
192.168.30.10:6379> lpushx a2 e 当键存在才会生效 和上面一样从左插入 键不存在不生效
192.168.30.10:6379> keys a* 查看列表
192.168.30.10:6379> lrange a2 0 -1 返回列表所有
2 lpop llen
lpop 移除并返回第一个元素,从头开始
llen 查看列表中元素个数
192.168.30.10:6379> lpop a2
"e" 移除并返回列表第一个元素
192.168.30.10:6379> llen a2
(integer) 5 查看列表所有的元素
192.168.30.10:6379> lrange a2 0 -1 打印列表所有的元素
3、lrem、lset、lindex、ltrim
lrem #从头部(left)向尾部(right)变量链表,删除2个值等于x的元素,返回值为实际删除的数量
lset #将索引值为xxx的元素值设置为新值xxx
lindex #获取索引值为xxx的元素值。
ltrim #仅保留索引值xxx到xxx的元素
127.0.0.1:6379> lrange a2 0 -1 查看列表的所有数值
127.0.0.1:6379> lpushx a2 e 在表头添加一个数值
127.0.0.1:6379> lrange a2 0 -1 再次查询
127.0.0.1:6379> lrem a2 2 e 删除从头到尾2个等于e的值
127.0.0.1:6379> lrange a2 0 -1 再次查询
127.0.0.1:6379> lset a2 2 c 将索引值为2的改为c
127.0.0.1:6379> lrange a2 0 -1 再次查询
127.0.0.1:6379> lindex a2 2 查看索引为2的值
127.0.0.1:6379> ltrim a2 0 2 仅保留索引为0-2的值
127.0.0.1:6379> lrange a2 0 -1 再次查询列表
4 linsert
在键的x元素前|后插入新元素元素
127.0.0.1:6379> lrange a2 0 -1 查看列表所有的值
linsert a2 before 4 1 在4之前添加
linsert a2 after 4 1 在4之后添加
lrange a2 0 -1 查看列表数值
5 rpush、rpushx
rpush 将值从左往右依次插入到表尾
rpushx 指定键存在时执行,否则不执行
rpush s2 1 2 3 4 和lpush不一样 rpush是从尾部插入
lrange s2 0 -1 查看列表数值
rpushx s2 6 指定s2这个键插入一个6 键存在才执行
127.0.0.1:6379> rpushx s3 6
(integer) 0 s3不存在所以不执行
6、rpop、rpoplpush
rpop 移除并返回键的第一个元素,从尾开始
rpoplpush 将键1尾部元素xxx弹出,同时再插入到键2的头部(原子性的完成这两步操作)
rpop a2 移除列表尾部的第一个元素
lrange a2 0 -1 查看
rpoplpush a2 s2 a2尾部元素弹出到s2的头部
lrange a2 0 -1
lrange s2 0 -1 查看两个列表
三 Hash数据类型(散列)
hash用于存储对象。可以采用这样的命名方式:对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。 如:存储 ID 为 2 的汽车对象。
如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。
1 hset、hget、hdel、hexists、hlen、hsetnx
hset 给xxx键设置字段为xxx,值为xxx
hget 获取xxx键,字段为xxx的值
hdel 删除xxx键的xxx字段,成功返回1
hexists 判断xxx键中的xxx字段是否存在,存在返回1
hlen 获取xxx键的字段数量
hsetnx 给xxx键添加新字段,是否执行基于此字段是否存在,不管键是否存在,返回1表示执行成功
hset s3 v1 a v2 b v3 c 创建s3键 类型为hash 并创建字段和赋值
hget s3 v1 获取一个字段的值0
hdel s3 v2 删除一个字段
hexists s3 v2 判断一个键存不存在 不存在返回0
hlen s3 获取键的字段数量
hsetnx s3 v3 a 给键添加新字段 基于字段是否存在 键可以不存在自动创建 存在返回0 不存在返回1
hset s3 v4 a v4原本不存在 可以成功添加值
2 hincrby hmset、hmget、hgetall、hkeys、hvals
hincrby 给xxx键的xxx字段值加x
hmset 批量为xxx键创建字段和赋值
hmget 获取指定多个字段值
hgetall 返回xxx键的所有字段及其值,是逐对列出的
hkeys 仅获取xxx键中所有字段名
hvals 仅获取xxx键中所有字段值
hmset m1 f1 10 f2 20 f3 30 批量建立键和值
hmget m1 f1 f2 获取指定的字段值
hgetall m1 获取一个键的所有值 逐对打印
hkeys m1 获取一个键的全部字段名
hvals m1 获取一个键的所有值
四、set数据类型(无序集合)
无序集合,元素类型为String类型,元素具有唯一性,不允许存在重复的成员。多个集合类型之间可以进行并集、交集和差集运算。
应用范围:
1.可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。对于此场景,我们仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地址的唯一性。
1、sadd、smembers、scard、sismember
sadd 将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合
smembers 通过smembers命令查看插入的结果,输出的顺序与插入顺序无关
scard 获取集合中成员的数量
sismember 判断键中xxx成员是否存在,返回0表示不存在,1表示存在
sadd set a b c d 将成员放入一个集合内
SMEMBERS set 查看组成员
scard set 统计组成员的个数
sismember set a 验证一个成员是否存在 存在返回1 不存在返回0
sismember set e
2 spop、srem、srandmember、smove
spop 随机的移除并返回键中的某一成员
srem 从键中移出xxx、xxx、xxx成员,并返回移出成员个数
srandmember 该命令随机的返回某一成员
smove 将键1的xxx成员移到键2,成功返回1,失败返回0
127.0.0.1:6379> spop set
"b" 随机删除一个成员
127.0.0.1:6379> smembers set
1) "a"
2) "d"
3) "c" 查看成员已经删除
srem set a d c 移除成员 并且统计个数
smembers set 查看 此时集合内没有成员
sadd set x 添加一个成员
smove set set2 x 将x移动到set2集合去 集合会自动创建
五、Sorted Set数据类型(zset、有序集合)
1、有序集合,元素类型为String,元素具有唯一性,不能重复。
2、每个元素都会关联一个double类型的分数score(表示权重),可以通过权重的大小排序,元素的score可以相同。
应用范围:
1)可以用于一个大型在线游戏的积分排行榜。每当玩家的分数发生变化时,可以执行ZADD命令更新玩家的分数,此后再通过ZRANGE命令获取积分TOP10的用户信息。当然我们也可以利用ZRANK命令通过username来获取玩家的排行信息。最后我们将组合使用ZRANGE和ZRANK命令快速的获取和某个玩家积分相近的其他用户的信息。
2)Sorted-Set类型还可用于构建索引数据。
1、zadd、zcard、zcount、zrem、zincrby、zscore、zrank
zadd 将一个或多个成员元素及其分数值加入到有序集当中
zcard 获取键中成员的数量
zcount 分数满足表达式x <= score <= x的成员的数量
zrem 删除成员xxx、xxx,返回实际删除成员的数量
zincrby 成员xxx不存在,zincrby命令将添加该成员并假设其初始分数为0
zscore 获取成员xxx的分数
zrank 获取成员xxx的位置索引值
zadd go 1 a 2 b 3 c 4 d 添加成员到有序集合 成员和值对应
zrange go 0 -1 查看成员
zrange go 0 -1 withscores 查看成员和他的值
zrank go c 获取成员c的索引
zcard go 获取集合成员的个数
zcount go 1 3 返回值为1-3成员个数
zrem go a b 删除a b并且返回删除的个数
zcard go 验证删除是否成功
zscore go d 获取d的值
zincrby go 4 e 表示e这个成员不存在 则会添加这个成员 初始值为0 再+4 返回结果
zincrby go -1 e -1返回
2 zrangebyscore、zremrangebyrank、zremrrangebyscore
zrangebyscore go 1 4 获取1 4的成员
zrangebyscore go -inf +inf limit 2 3 获取第一和最后 索引为2 3的成员
zremrangebyscore go 1 2 删除 1 2的成员并返回删除的个数
zrange go 0 -1 查看所剩成员
3、zrevrange、zrevrangebyscore、zrevrank
zadd go 1 a 2 b 3 c 4 d 5 e 创建一个集合
zrange go 0 -1 获取成员
ZREVRANGE go 0 -1 用索引来从高到底排序成员并输出
zrevrank go c 查询c的索引 且是反向排序
zrevrangebyscore go 5 3 值再5 3的成员(反向)
zrevrangebyscore go 3 1 limit 1 2 值在3 1且索引是1 2的(反向)
以上是关于Linux运维数据库篇 redis数据类型汇总的主要内容,如果未能解决你的问题,请参考以下文章