天天看点

三.Redis学习:五种常用数据类型的常用命令stringhashlistsetzset(sorted set)

string类型

  • string
  • hash
  • list
  • set
  • zset(sorted set)
string类型常用命令

string

Redis的string类型,默认可以存储512mb。顾明思意,就是字符串类型。它也是我们使用redis使用最频繁的一种数据类型。redis也为他的使用提供了多种方法。

# set key value 新增一个string类型的键值对
ali-redis:0>set name a_fig 
OK	#ok表示成功

# 查询一个key
ali-redis:0>get name
a_fig	#查询结果

# getrange key statrt end 根据key获取指定值长度的结果。python中称为切片,java中称为字符串截取。
ali-redis:0>getrange name 0 -1
a_fig

ali-redis:0>getrange name 0 2
a_f

# getset key value 先根据key取值,再根据value设置值
ali-redis:0>getset age 22
18

# 获取多个值
ali-redis:0>mget name age
1) a_fig
2) 22

# 设置多个值
ali-redis:0>mset sex 男 description 描述...
OK

# setex key seconds value 设置一个带有过期时间的值(时间单位:秒)
ali-redis:0>setex token 30 codexxxx
OK
# 查询key的过期时间
ali-redis:0>ttl token
25

ali-redis:0>get token
codexxxx

# setnx key value 设置一个value,当这个key存在时设置失败并返回0,key不存在时设置成功返回1
ali-redis:0>setnx toen codexxx
1

ali-redis:0>setnx toen codeaaa
0

# msetnx key1 value1 key2 value2 ...  设置多个基于nx的string类型的key-value(redis中如果有一个key与新增的key相同,全部都不会执行)
ali-redis:0>msetnx kmsn1 v111 kmsn2 v222 kmsn3 v333
1

ali-redis:0>mget kmsn1 kmsn3 kmsn2
1) v111
2) v333
3) v222

# strlen key 获取字符串值的长度
ali-redis:0>strlen name
5

ali-redis:0>get name
a_fig

# psetex key milliseconds value 设置一个过期时间以毫秒为单位的string类型的key-value
ali-redis:0>psetex token 60000 code005454011
OK

ali-redis:0>ttl token
55

ali-redis:0>ttl token
40

ali-redis:0>get token
code005454011

ali-redis:0>get token
NULL

# 设置年龄
ali-redis:0>set age 18
OK

# incr key 如果key中存储的value是数字,会增加1
ali-redis:0>incr age
19

# decr key 如果key中存储的value是数字,会减1
ali-redis:0>decr age
18

# incrby key number 如果key中存储的value是数字,会根据number进行增加。
ali-redis:0>incrby age 2
20

# decrby key number 如果key中存储的value是数字,会根据number进行减少。
ali-redis:0>decrby age 4
16

# incrbyfloat key number 如果key中存储的value是一个数字,会根据浮点number进行增加(number是负数就为减)
ali-redis:0>incrbyfloat age 1.8
17.8

# append key 在字符串后面追加字符(拼接)
ali-redis:0>append name " is 牛逼"
15

ali-redis:0>get name
a_fig is 牛逼

# keys * 获取所有的key
ali-redis:0>keys *
1) toen
2) sex
3) name
4) description
5) k1
6) kmsn2
7) age
8) kmsn3
9) k2
10) kmsn1

# del key 删除key
ali-redis:0>del k2
1

ali-redis:0>get k2
NULL

# flushdb 清洗当前数据库(删除当前0号数据库的所有数据)
ali-redis:0>flushdb
OK

# flushall 清洗rendis的所有数据库
ali-redis:0>flushall 
OK

           
hash类型常用命令

hash

Redis的hash数据类型,相当java中的Map<String, Object>数据类型。redis为hash类型也提供了丰富的操作API。该类型数据适合存储对象类型的数据。

# hset hname field value 设置一个hash类型的数据
ali-redis:0>hset user:01 name "a_fig"
1

# hkeys hname 根据hash的name获取它的所有字段(field)
ali-redis:0>hkeys user:01
1) name

# hget hname field 获取hash指定字段的值
ali-redis:0>hget user:01 name
a_fig

# hvals hname 根据hname获取所有字段field的值
ali-redis:0>hvals user:01
1) a_fig

# hdel hname field 根据hname名称,并删除指定的字段field(由于该hash中只有一个值,被移除后,没有值的hash也会一起删除)
ali-redis:0>hdel user:01 name
1

# hexists hname field 查询hash对象是否存在某个field,0标识不存在
ali-redis:0>hexists user:01 name
0

ali-redis:0>hset user:01 name "a_figali-redis:0>"
1

ali-redis:0>hexists user:01 name
1

# hgetall hname 获取hash对象下的所有键-值对
ali-redis:0>hgetall user:01
1) name
2) a_fig
3) age
4) 16

# hsetnx hname field 设置hash对象字段值,如果存在则设置失败,返回0
ali-redis:0>hsetnx user:01 sex "女"
1

ali-redis:0>hsetnx user:01 sex "男"
0

ali-redis:0>hgetall user:01
1) name
2) a_fig
3) age
4) 16
5) sex
6) 女

# hlen hname 获取hash对象中所有字段field的数量
ali-redis:0>hlen user:01
3

# hmset hname field1 value2 field2 value2... 创建一个hash对象数据,并设置多个field和value。(至少一个值)
ali-redis:0>hmset user:02 name "不知何时已而不虚" age 18 desc "这是描述的天空"
OK

# ecpire key 为key设置过期时间
ali-redis:0>expire user:02 555
1

ali-redis:0>ttl user:02
341

# hincrby hname field number 为hash对象指定field的数字值增加对应的number整数。
ali-redis:0>hincrby user:01 age 1
17

# hincrbyfloat hname field number 为hash对象指定field的数字值增加对应number的浮点数。
ali-redis:0>hincrbyfloat user:01 age 1.9
18.9

           
list类型常用命令

list

Redis的list数据类型(列表),就类似于java的List<Object>数据类型,更贴切的形容,不如说它像java的链表。

# lpush key value1 value2 ... 将一个或多个值插入到列表的头部
ali-redis:0>lpush L01 "a_fig" 16 "真棒"
3

# lrange start end 获取列表指定区间的值
ali-redis:0>lrange L01 0 -1
1) 真棒
2) 16
3) a_fig

# lpushx key value 将一个值添加到已存在的列表的头部
ali-redis:0>lpushx L01 "我是第四个进来的"
4

ali-redis:0>lrange L01 0 -1
1) 我是第四个进来的
2) 真棒
3) 16
4) a_fig

# rpush key value1 value2 将一个或多个值插入到列表的尾部
ali-redis:0>rpush L01 "我是第五"
5

# rpushx key value 将一个值插入到已存在的列表尾部
ali-redis:0>rpushx L01 "我是第六"
6

ali-redis:0>lrange L01 0 -1
1) 我是第四个进来的
2) 真棒
3) 16
4) a_fig
5) 我是第五
6) 我是第六

# blpop key 从列表的头部获取并移除一个元素
ali-redis:0>blpop L01 1
1) L01
2) 我是第四个进来的

# brpop key 从列表的尾部获取并移除一个元素
ali-redis:0>brpop L01 1
1) L01
2) 我是第六

ali-redis:0>lrange L01 0 -1
1) 真棒
2) 16
3) a_fig
4) 我是第五

# brpoplpush source destination timeout 把第一个列表的最后一个元素,移动到第二个列表的前面。两个列表都必须存在。阻塞时间设置0表示永久阻塞,值到有值为止
ali-redis:0>brpoplpush L01 L02 1
我是第五

           
set类型常用命令

set

Redis的list数据类型,和java的set一样,存储内容不重复,而且无序;redis为该类型也提供了丰富的使用方法。

# sadd key value ... 添加一个或多个元素到set集合里
ali-redis:0>sadd myset01 "法外狂徒-张三" "克隆人-李逍遥" "时间管理大师-罗志祥" 0
4

# scard key 获取集合的元素数量
ali-redis:0>scard myset01
4

ali-redis:0>sadd myset02 "时间管理大师-罗志祥" 0
2

# sdiff key [key...] 获取差集
ali-redis:0>sdiff myset01 myset02
1) 法外狂徒-张三
2) 克隆人-李逍遥

# sdiffstore newkey key [key...] 获取集合的差集并存储到一个新的集合中
ali-redis:0>sdiffstore mysdiffstore myset01 myset02
2

# sinter key [key...] 获取两个集合的交集
ali-redis:0>sinter myset01 myset02
1) 0
2) 时间管理大师-罗志祥

# sinterstore newkey key [key...] 获取两个集合的交集,并存储到新的集合中
ali-redis:0>sinterstore mysinterstore myset01 myset02
2

# sismember key member 判断元素是否存在于集合中
ali-redis:0>sismember mysinterstore "时间管理大师-罗志祥"
1

ali-redis:0>sismember sinterstore "时间管理大师-罗志祥"
0

ali-redis:0>sismember mysinterstore "时间管理大师-罗志祥"
1

# smembers key 获取集合里的所有元素
ali-redis:0>smembers myset01
1) 0
2) 时间管理大师-罗志祥
3) 克隆人-李逍遥
4) 法外狂徒-张三

# smove key1 key2 member 移动集合里的元素到一个新的集合中
ali-redis:0>smove mysinterstore mydiffstore 0
1

ali-redis:0>smove mysinterstore ren:zha:01 "时间管理大师-罗志祥"
1

# spop key [count] 获取并移除集合里面的元素(count个数量)
ali-redis:0>spop mysdiffstore 1
1) 法外狂徒-张三

ali-redis:0>smembers mysdiffstore 
1) 克隆人-李逍遥

# srandmember key [count] 从集合里获取指定count数量个元素(不删)
ali-redis:0>srandmember myset01 3
1) 法外狂徒-张三
2) 克隆人-李逍遥
3) 时间管理大师-罗志祥

ali-redis:0>smembers myset01
1) 0
2) 时间管理大师-罗志祥
3) 克隆人-李逍遥
4) 法外狂徒-张三

ali-redis:0>smembers myset03
1) 法外狂徒-张三
2) 克隆人-李逍遥

ali-redis:0>smembers mysdiffstore
1) 克隆人-李逍遥

# sunion key [key...] 获取一个集合或多个集合去重后的结果
ali-redis:0>sunion myset03 mysdiffstore
1) 克隆人-李逍遥
2) 法外狂徒-张三

# sunionstore newkey key [key...] 获取一个或多个集合去重后的结果,并存储到新的集合中
ali-redis:0>sunionstore daxia myset03 mysdiffstore
2

ali-redis:0>smembers daxia
1) 克隆人-李逍遥
2) 法外狂徒-张三

# scan cursor match like count number 根据游标模糊搜索key,设置count 2代表只查找条数据。
ali-redis:0>scan 0 match myset* count 7
1) 0
2) myset03
myset02
myset01

ali-redis:0>scan 0 match myset* count 2
1) 6
2) myset03

           
zset数据类型常用命令(有序)

zset(sorted set)

Rdisde的zset(sorted set)数据类型,是有序的set集合,同样redis提供了丰富的api,具体我们来看一下他的常用命令。

# zadd key [xx|nx|ch] index1 value1 index2... 添加一个或多个元素到有序集合中
ali-redis:0>zadd zk 0 "天神套" 1 "天鲲套"
2

# nx 添加已存在会失败
ali-redis:0>zadd zk nx 0 "天神套" 1 "天鲲套"
0

# zcard key 获取集合中的元素数量
ali-redis:0>zcard zk
2

# zcount key min max 获取指定分数范围的集合元素数量
ali-redis:0>zcount zk 0 1
2

# zincrby key increment member 为元素的排序设置增量评分
ali-redis:0>zincrby zk 3 "天神套"
16

# zinterstore newkey keynumber key1 key2 获取一个或多个有序集合的交集,并保存到新的zset中,增量也会相加合并为一个
ali-redis:0>zinterstore zk5 3 zk zk1 zk2
3

# zrange key start end [withscores] 获取指定范围的元素
ali-redis:0>zrange zk5 0 -1 withscores
1) 天神套
2) 32
3) 天鲲套
4) 34
5) 火龙果
6) 36

# zlexcount key min max 获取区间的元素个数 min- max+
ali-redis:0>zlexcount zk5 - +
3

# zpopmax key 获取并移除集合中分数最大的元素
ali-redis:0>zpopmax zk5
1) 火龙果
2) 36

ali-redis:0>zincrby zk5 6 "天神套"
38

# zpopmin key 获取并移除集合中分数最小的元素
ali-redis:0>zpopmin zk5
1) 天鲲套
2) 34

# zrank key member 查询元素的下标
ali-redis:0>zrank zk5 "天神套"
0

# zrem key mumber... 移除集合中一个或多个元素
ali-redis:0>zrem zk5 "天神套"
1

# zscan key cursor match like count number 指定循环的开始下标cursor,指定模糊查询条件like,指定一次返回条数count
ali-redis:0>zscan zk4 0 match "天*" count 30
1) 0
2) 天神套
32
天鲲套
34 

           

以上就是五大类型常用的方法

更多的其它方法,请查阅官方文档等资料。

继续阅读