五大基本数据类型
Redis-Key
在redis中无论什么数据类型,在数据库中都是以key-value形式保存,通过进行对Redis-key的操作,来完成对数据库中数据的操作。
exists key:判断键是否存在del key:删除键值对move key db:将键值对移动到指定数据库expire key second:设置键值对的过期时间type key:查看value的数据类型- 看帮助文档: help @string @list @set @hash @zset
127. 0.0.1:6379> set name yuan # set key
OK
127. 0.0.1:6379> set age 18
OK
127. 0.0.1:6379> keys * # 查看当前数据库所有key
1) "age"
2) "name"
127. 0.0.1:6379> move age 1 # 将键值对移动到指定数据库
(integer) 1
127. 0.0.1:6379> select 1
OK
127. 0.0.1:6379[1]> get age
"18"
127. 0.0.1:6379[1]> del age #删除键为age的值
(integer) 1
127. 0.0.1:6379[1]> exists age #判断age是否存在
(integer) 0 #不存在
127. 0.0.1:6379> set age 10
OK
127. 0.0.1:6379> expire age 10 # 设置键值对的过期时间
(integer) 1
127. 0.0.1:6379> ttl age # 查看key的过期剩余时间
(integer) 6
127. 0.0.1:6379> ttl age
(integer) 2
127. 0.0.1:6379> ttl age
(integer) -2 # -2 表示key过期
127. 0.0.1:6379> get age # 过期的key 会被自动delete
(nil)
127. 0.0.1:6379> type name #查看value的类型
string
#####################################################
127. 0.0.1:6381> set key name
OK
#设置key的过期时间为10秒
127. 0.0.1:6381> expire key 10
(integer) 1
#查看还剩多少秒过期
127. 0.0.1:6381> ttl key
(integer) 5
Redis的key,通过TTL命令返回key的过期时间,一般来说有3种:
- 当前key没有设置过期时间,所以会返回-1.
- 当前key有设置过期时间,而且key已经过期,所以会返回-2.
- 当前key有设置过期时间,且key还没有过期,故会返回key的正常剩余时间.
关于重命名RENAME和RENAMENX
RENAME key newkey修改 key 的名称RENAMENX key newkey仅当 newkey 不存在时,将 key 改名为 newkey 。
String(字符串)
127. 0.0.1:6379> set key1 yuan1 #存储一个key
OK
127. 0.0.1:6379> get key1 #查看key
"yuan1"
127. 0.0.1:6379> exists key1 #判断key是否存在
(integer) 1
127. 0.0.1:6379> append key1 hello #向指定的key的value后追加字符串
(integer) 10
127. 0.0.1:6379> get key1
"yuan1hello"
127. 0.0.1:6379> strlen key1 #获取字符串的长度
(integer) 10
127. 0.0.1:6379>
##############################################################################################
i++ 自增
127. 0.0.1:6379> set views 0 #初始值为0
OK
127. 0.0.1:6379> get views
"0"
127. 0.0.1:6379> incr views #自增,值+1
(integer) 1
127. 0.0.1:6379> incr views #自增+1
(integer) 2
127. 0.0.1:6379> decr views #自减-1
(integer) 1
127. 0.0.1:6379> decr views #自减-1
(integer) 0
127. 0.0.1:6379> get views
"0"
127. 0.0.1:6379> incrby views 10 设置步长指定增量,这里指定的增量为10
(integer) 10
127. 0.0.1:6379> get views
"10"
127. 0.0.1:6379> decrby views 5 设置步长指定减量,这里指定的增量为5
(integer) 5
127. 0.0.1:6379> get views
"5"
127. 0.0.1:6379>
##############################################################################################
#字符串范围 range
127. 0.0.1:6379> get key1
"yuan1hello"
127. 0.0.1:6379> getrange key1 0 3 #截取字符串[0,3]
"yuan"
127. 0.0.1:6379> getrange key1 0 -1 #获得全部字符串和get key是一样的
"yuan1hello"
#替换
127. 0.0.1:6379> setrange key1 1 ** #替换指定为开始位置的字符串!
(integer) 10
127. 0.0.1:6379> get key1
"y**n1hello"
##################################################################################################
# setex (set with expire) #设置过期时间
# setnx (set if not exist) #不存在在设置(在分布式中常常使用)
127. 0.0.1:6379> setex key2 30 "helo" #设置key2的值为hello ,30秒后过期
OK
127. 0.0.1:6379> ttl key2
(integer) 24
127. 0.0.1:6379> setnx mykey "redis" #如果mykey不存在,创建mykey
(integer) 1
127. 0.0.1:6379> keys *
1) "mykey"
2) "key1"
3) "views"
4) "viesw"
127. 0.0.1:6379> ttl key2
(integer) -2
127. 0.0.1:6379> setnx mykey "MongoDB" #如果mykey存在,创建失败!
(integer) 0
127. 0.0.1:6379> get mykey
"redis"
127. 0.0.1:6379>
##################################################################################################
mset #同时设置多个值
mget #同时获取多个值
127. 0.0.1:6379> mset k1 v1 k2 v2 k3 v3 #同时设置多个值
OK
127. 0.0.1:6379> keys *
1) "k2"
2) "k3"
3) "k1"
127. 0.0.1:6379> mget k1 k2 k3 #同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127. 0.0.1:6379> msetnx k1 v1 k4 v4 #msetnx要么一起成功,要么一起失败
(integer) 0
127. 0.0.1:6379> get k4
(nil)
127. 0.0.1:6379>
#对象
set user:1{name:zhangsan,age:10} #设置一个user:1对象,值为json来保存一个对象!
#这里的key是一个巧妙的设计: user:{id}:{filed} ,如此设计在Redis中是完全OK了!
127. 0.0.1:6379> mset user:1:name zhangsan user:1:age 2
OK
127. 0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"
127. 0.0.1:6379>
#######################################################################################
getset #先get然后在set
127. 0.0.1:6379> getset db redis #如果不存在值,返回nil
(nil)
127. 0.0.1:6379> get db
"redis"
127. 0.0.1:6379> getset db mongodb #如果存在值,获取原来的值,并设置新的值
"redis"
127. 0.0.1:6379> get db
"mongodb"
127. 0.0.1:6379>
List(列表)
127. 0.0.1:6379> lpush list one #将一个值或多个值,插入打列表头部(左)
(integer) 1
127. 0.0.1:6379> lpush list two
(integer) 2
127. 0.0.1:6379> lpush list three
(integer) 3
127. 0.0.1:6379> lrange list 0 -1 #获取列表的所有数据
1) "three"
2) "two"
3) "one"
127. 0.0.1:6379> lrange list 0 1 #通过区间获取,获取列表的数据倒着来的,最后一个为0
1) "three"
2) "two"
127. 0.0.1:6379> rpush list righr #讲一个值,或多个值,插入到列表左边(底)
(integer) 4
127. 0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "righr"
127. 0.0.1:6379>
###############################################################################################
lpop #左删除
rpop #右删除
127. 0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "righr"
127. 0.0.1:6379> lpop list #移除list的第一个元素
"three"
127. 0.0.1:6379> rpop list #移除list的最后一个元素
"righr"
127. 0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127. 0.0.1:6379>
###############################################################################################
lindex 通过下标获取元素
127. 0.0.1:6379> lindex list 1 #通过list获取某一项值
"one"
127. 0.0.1:6379> lindex list 0
"two"
127. 0.0.1:6379>
###############################################################################################
llen #获取list的长度
127. 0.0.1:6379> lpush one
(error) ERR wrong number of arguments for 'lpush' command
127. 0.0.1:6379> lpush list one
(integer) 1
127. 0.0.1:6379> lpush list two
(integer) 2
127. 0.0.1:6379> lpush list three
(integer) 3
127. 0.0.1:6379> llen list #获取列表的长度
(integer) 3
127. 0.0.1:6379>
###############################################################################################
lrem #移除指定的值
127. 0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "one"
4) "two"
127. 0.0.1:6379> lrem list 1 one #移除元素为one的值 1代表个数
(integer) 1
127. 0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
127. 0.0.1:6379> lrem list 2 three #移除2个元素为three的值 2代表个数
(integer) 2
127. 0.0.1:6379> lrange list 0 -1
1) "two"
127. 0.0.1:6379>
###############################################################################################
trim 截取
127. 0.0.1:6379> rpush list "list1"
(integer) 1
127. 0.0.1:6379> rpush list "list2"
(integer) 2
127. 0.0.1:6379> rpush list "list3"
(integer) 3
127. 0.0.1:6379> rpush list "list4"
(integer) 4
127. 0.0.1:6379> ltrim list 1 2 # 通过下标截取指定的长度,这个list已经被改变了,截断了只剩下截取的元素!
OK
127. 0.0.1:6379> lrange list 0 -1
1) "list2"
2) "list3"
127. 0.0.1:6379>
###############################################################################################
rpoplpush #移除列表最后一个元素,将他移动导新的列表中
127. 0.0.1:6379> flushdb
OK
127. 0.0.1:6379> rpush list lis1
(integer) 1
127. 0.0.1:6379> rpush list lis2
(integer) 2
127. 0.0.1:6379> rpush list lis3
(integer) 3
127. 0.0.1:6379> rpoplpush list list2 #移除列表的最后一个元素,将他们移动到新的列表中!
"lis3"
127. 0.0.1:6379> lrange list 0 -1 #查看原来的列表
1) "lis1"
2) "lis2"
127. 0.0.1:6379> lrange list2 0 -1 #查看新的列表,存在改变的值
1) "lis3"
127. 0.0.1:6379>
###############################################################################################
lset #将指定列表中的下标的值替换为另外一个值,更新操作
127. 0.0.1:6379> EXISTS list #判断列表是否存在
(integer) 0
127. 0.0.1:6379> set list 0 itme #如果不存在,则创建失败
(error) ERR syntax error
127. 0.0.1:6379> lpush list value1
(integer) 1
127. 0.0.1:6379> lrange list 0 -1
1) "value1"
127. 0.0.1:6379> lset list 0 itme #如果存在则更新下标的值
OK
127. 0.0.1:6379> lrange list 0 -1
1) "itme"
127. 0.0.1:6379> lset list 1 aa #如果不存在,则会报错
(error) ERR index out of range
127. 0.0.1:6379>
###############################################################################################
Linsert #将某个值插入到某个元素的前面或者后面
127. 0.0.1:6379> FLUSHDB
OK
127. 0.0.1:6379> rpush list hello
(integer) 1
127. 0.0.1:6379> rpush list redis
(integer) 2
127. 0.0.1:6379> linsert list before redis "**" #在redis的前面插入入**值
(integer) 3
127. 0.0.1:6379> linsert list after redis "qian" #在redis的后面插入qian值
(integer) 4
127. 0.0.1:6379> lrange list 0 -1
1) "hello"
2) "**"
3) "redis"
4) "qian"
127. 0.0.1:6379>
#存储一段josn数据
lpush studentkey {id:1001,name:zhangsan,age:30} {id:1002,name:lisi,age:18}
#修改年龄为索引一的age为20
127. 0.0.1:6381> lset studentkey 1 {id:1002,name:lisi,age:20}
#获取索引为1的值
127. 0.0.1:6381> LRANGE studentkey 1 1
1) "{id:1002,name:lisi,age:20}"
小结
·他实际上是一个链表,before Node after , left , right 都可以插入值
·如果key不存在,创建新的链表
·如果key存在,新增内容
·如果移除了所有值,空链表,也代表不存在!
·在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点~
消息排队!消息队列( Lpush Rpop ) ,栈(Lpush Lpop )
Set(集合)
127. 0.0.1:6379> sadd myset "hello" #给set集合添加元素 sadd key1 a b c d 添加多个值为 a b c d
(integer) 1
127. 0.0.1:6379> sadd myset "set"
(integer) 1
127. 0.0.1:6379> sadd myset "***"
(integer) 1
127. 0.0.1:6379> SMEMBERS myset #查看set的值
1) "***"
2) "hello"
3) "set"
127. 0.0.1:6379> SISMEMBER myset hello #判断元素是否存在set集合中
(integer) 1
127. 0.0.1:6379> SISMEMBER myset hell
(integer) 0
127. 0.0.1:6379>
###############################################################################################
127. 0.0.1:6379> scard myset #获取set集合内容元素的个数
(integer) 3
127. 0.0.1:6379>
###############################################################################################
127. 0.0.1:6379> srem myset hello #移除set中的指定元素
(integer) 1
127. 0.0.1:6379> scard myset #获取set集合内容元素的个数
(integer) 2
127. 0.0.1:6379> smembers myset #查看set的值
1) "***"
2) "set"
127. 0.0.1:6379>
###############################################################################################
srandmember #随机抽取set集合中的元素
127. 0.0.1:6379> smembers myset
1) "***"
2) "set"
127. 0.0.1:6379> srandmember myset #随机抽取set集合中的元素
"***"
127. 0.0.1:6379> srandmember myset #随机抽取set集合中的元素
"set"
127. 0.0.1:6379> srandmember myset #随机抽取set集合中的元素
"set"
127. 0.0.1:6379> srandmember myset #随机抽取set集合中的元素
"set"
127. 0.0.1:6379>
###############################################################################################
随机删除key
127. 0.0.1:6379> SMEMBERS myset
1) "***"
2) "yuan"
3) "set"
127. 0.0.1:6379> spop myset #随机删除set集合中的元素
"***"
127. 0.0.1:6379> spop myset
"set"
127. 0.0.1:6379> SMEMBERS myset
1) "yuan"
127. 0.0.1:6379>
###############################################################################################
#将指定的值移动到另一个set集合
127. 0.0.1:6379> FLUSHDB
OK
127. 0.0.1:6379> sadd myset hello
(integer) 1
127. 0.0.1:6379> sadd myset redis
(integer) 1
127. 0.0.1:6379> sadd myset yuan
(integer) 1
127. 0.0.1:6379> sadd myset2 ***
(integer) 1
127. 0.0.1:6379> smove myset myset2 yuan #将myset集合的yuan元素移动搭配myset2中
(integer) 1
127. 0.0.1:6379> SMEMBERS myset
1) "redis"
2) "hello"
127. 0.0.1:6379> SMEMBERS myset2
1) "***"
2) "yuan"
127. 0.0.1:6379>
###############################################################################################
数组集合类
-差集
-交集
-并集
127. 0.0.1:6379> FLUSHDB
OK
127. 0.0.1:6379> sadd key1 a
(integer) 1
127. 0.0.1:6379> sadd key1 b
(integer) 1
127. 0.0.1:6379> sadd key1 c
(integer) 1
127. 0.0.1:6379> sadd key2 c
(integer) 1
127. 0.0.1:6379> sadd key2 d
(integer) 1
127. 0.0.1:6379> sadd key2 e
(integer) 1
127. 0.0.1:6379> sdiff key1 key2 #差集 key1 和key2 比较,key1有哪些值在key2没有
1) "a"
2) "b"
127. 0.0.1:6379> sinter key1 key2 #交集 共同存在的
1) "c"
127. 0.0.1:6379> sunion key1 key2 #并集双方加起来的值,重复的不算
1) "a"
2) "b"
3) "c"
4) "e"
5) "d"
127. 0.0.1:6379>
Hash(哈希)
Map集合,key-map!时候这个值是一个map集合!本质和String类型没有太大区别,还是一个简单的 key-vlaue !
127. 0.0.1:6379> FLUSHDB
OK
127. 0.0.1:6379> hset myhash fidld1 yuan #set一个具体的key-vlaus
(integer) 1
127. 0.0.1:6379> hget myhash fidld1 #获取一个字段值
"yuan"
127. 0.0.1:6379> hmset myhash fidld1 hello fidld2 world #同时set多个key-vlaue
OK
127. 0.0.1:6379> hmget myhash fidld1 fidld2 #同时获取多个值
1) "hello"
2) "world"
127. 0.0.1:6379> hgetall myhash #获取所有的值
1) "fidld1"
2) "hello"
3) "fidld2"
4) "world"
127. 0.0.1:6379> hdel myhash fidld1 #删除hash指定key字段!对应的value值也就消失了!
(integer) 1
127. 0.0.1:6379> hgetall myhash
1) "fidld2"
2) "world"
127. 0.0.1:6379>
###############################################################################################
#hlen 获取hash的长度
127. 0.0.1:6379> hset myhash fidld1 yuan
(integer) 1
127. 0.0.1:6379> hlen myhash #获取hash的长度
(integer) 2
127. 0.0.1:6379> hgetall myhash
1) "fidld2"
2) "world"
3) "fidld1"
4) "yuan"
127. 0.0.1:6379>
################################################################################################
#hexists 判断指定的hash是否存在
127. 0.0.1:6379> hexists myhash fidld1 #判断hash是否存在
(integer) 1
127. 0.0.1:6379> hexists myhash fidld7
(integer) 0
127. 0.0.1:6379>
#hkeys 获取所有的key
#hvals 获取所有的values
127. 0.0.1:6379> hkeys myhash #获取所有的key
1) "fidld2"
2) "fidld1"
127. 0.0.1:6379> hvals myhash #获取所有的values值
1) "world"
2) "yuan"
127. 0.0.1:6379>
################################################################################################
127. 0.0.1:6379> hset myhash field3 #指定增量
(integer) 1
127. 0.0.1:6379> hincrby myhash field3 1 #自增1
(integer) 1
127. 0.0.1:6379> hincrby myhash field3 -1 #自减1
(integer) 0
127. 0.0.1:6379> hsetnx myhash field4 hello #如果存在则创建成功
(integer) 1
127. 0.0.1:6379> hsetnx myhash field4 word #不存在则创建失败
(integer) 0
127. 0.0.1:6379>
################################################################################################
127. 0.0.1:6379> hset user:1 name yuan #存贮一个user对象,名字为yuan
(integer) 1
127. 0.0.1:6379> hget user:1 name 获取suer对象的姓名为yuan
"yuan"
127. 0.0.1:6379>
hash变更的数据user name age;尤其是是用户信息之类的,经常变动的信息! hash更适合于对象的存储,String更加适合字符串存储!
Zset(有序集合)
在set的基础上,增加了一个值,set k1 v1 zset k1 score1 v1
127. 0.0.1:6379> zadd myset 1 one #添加一个值1指定分数 one 指定值
(integer) 1
127. 0.0.1:6379> zadd myset 2 two 3 three 添加多个值
(integer) 2
127. 0.0.1:6379> zrange myset 0 -1
1) "one"
2) "two"
3) "three"
127. 0.0.1:6381> ZSCORE myset two #获取分数
"2"
127. 0.0.1:6381> zincrby myset 10 one #给one自增10
"11"
################################################################################################
127. 0.0.1:6379> zadd salary 100 yuan
(integer) 1
127. 0.0.1:6379> zadd salary 200 yuan2
(integer) 1
127. 0.0.1:6379> zadd salary 210 yuan3
(integer) 1
127. 0.0.1:6379> zrangebyscore salary -inf +inf #显示所有用户,从小到大排序!
1) "yuan"
2) "yuan2"
3) "yuan3"
127. 0.0.1:6379> zrevrange salary 0 -1 #显示所有用户,从大到小排序
1) "yuan3"
2) "yuan2"
3) "yuan1"
127. 0.0.1:6379> zrangebyscore salary -inf +inf withscores #显示所有用户,并且附带成绩
1) "yuan"
2) "100"
3) "yuan2"
4) "200"
5) "yuan3"
6) "210"
127. 0.0.1:6379> zrangebyscore salary -inf 200 withscores 显示小于等于200成绩的人员信息
1) "yuan"
2) "100"
3) "yuan2"
4) "200"
127. 0.0.1:6379>
################################################################################################
#zrem 移除元素
127. 0.0.1:6379> zrange salary 0 -1
1) "yuan"
2) "yuan2"
3) "yuan3"
127. 0.0.1:6379> zrem salary yuan #移除元素
(integer) 1
127. 0.0.1:6379> zrange salary 0 -1
1) "yuan2"
2) "yuan3"
127. 0.0.1:6379> zcard salary #查看集合的个数
(integer) 2
127. 0.0.1:6381> ZREMRANGEBYRANK myzset 0 1 #删除区间值
(integer) 2
################################################################################################
127. 0.0.1:6379> FLUSHDB
OK
127. 0.0.1:6379> zadd myset 1 yuan1 2 yuan2 3 yuan3 #获取区间值
(integer) 3
127. 0.0.1:6379> zcount myset 1 3
(integer) 3
127. 0.0.1:6379>
案例思路: set 排序存储班级成绩表,工资表排序!普通消息,
重要消息2,带权重进行判断!
排行榜应用实现,
常用命令
常用命令
1)连接操作命令
quit:关闭连接(connection)
auth:简单密码认证
help cmd: 查看cmd帮助,例如:help quit
2)持久化
save:将数据同步保存到磁盘
bgsave:将数据异步保存到磁盘
lastsave:返回上次成功将数据保存到磁盘的Unix时戳
shundown:将数据同步保存到磁盘,然后关闭服务
3)远程服务控制
info:提供服务器的信息和统计
monitor:实时转储收到的请求
slaveof:改变复制策略设置
config:在运行时配置Redis服务器
4)对key操作的命令
del(key):删除一个key
type(key):返回值的类型
keys(pattern):返回满足给定pattern的所有key
randomkey:随机返回key空间的一个
keyrename(oldname, newname):重命名key
dbsize:返回当前数据库中key的数目
select(index):按索引查询
move(key, dbindex):移动当前数据库中的key到dbindex数据库
flushdb:删除当前选择数据库中的所有key
flushall:删除所有数据库中的所有key
5)String
set(key, value):给数据库中名称为key的string赋予值value
get(key):返回数据库中名称为key的string的value
getset(key, value):给名称为key的string赋予上一次的value
mget(key1, key2,…, key N):返回库中多个string的value
setnx(key, value):添加string,名称为key,值为value
setex(key, time, value):向库中添加string,设定过期时间time
mset(key N, value N):批量设置多个string的值
msetnx(key N, value N):如果所有名称为key i的string都不存在
incr(key):名称为key的string增1操作
incrby(key, integer):名称为key的string增加integer
decr(key):名称为key的string减1操作
decrby(key, integer):名称为key的string减少integer
append(key, value):名称为key的string的值附加value
substr(key, start, end):返回名称为key的string的value的子串
6)List
rpush(key, value):在名称为key的list尾添加一个值为value的元素
lpush(key, value):在名称为key的list头添加一个值为value的 元素
llen(key):返回名称为key的list的长度
lrange(key, start, end):返回名称为key的list中start至end之间的元素
ltrim(key, start, end):截取名称为key的list
lindex(key, index):返回名称为key的list中index位置的元素
lset(key, index, value):给名称为key的list中index位置的元素赋值
lrem(key, count, value):删除count个key的list中值为value的元素
lpop(key):返回并删除名称为key的list中的首元素
rpop(key):返回并删除名称为key的list中的尾元素
blpop(key1, key2,… key N, timeout):lpop命令的block版本。
brpop(key1, key2,… key N, timeout):rpop的block版本。
rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为 dstkey的list的头部
7)Set
sadd(key, member):向名称为key的set中添加元素member
srem(key, member) :删除名称为key的set中的元素member
spop(key) :随机返回并删除名称为key的set中一个元素
smove(srckey, dstkey, member) :移到集合元素
scard(key) :返回名称为key的set的基数
sismember(key, member) :member是否是名称为key的set的元素
sinter(key1, key2,…key N) :求交集
sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
sunion(key1, (keys)) :求并集
sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
sdiff(key1, (keys)) :求差集
sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
smembers(key) :返回名称为key的set的所有元素
srandmember(key) :随机返回名称为key的set的一个元素
8)Hash
hset(key, field, value):向名称为key的hash中添加元素field
hget(key, field):返回名称为key的hash中field对应的value
hmget(key, (fields)):返回名称为key的hash中field i对应的value
hmset(key, (fields)):向名称为key的hash中添加元素field
hincrby(key, field, integer):将名称为key的hash中field的value增加integer
hexists(key, field):名称为key的hash中是否存在键为field的域
hdel(key, field):删除名称为key的hash中键为field的域
hlen(key):返回名称为key的hash中元素个数
hkeys(key):返回名称为key的hash中所有键
hvals(key):返回名称为key的hash中所有键对应的value
hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value