【Chapter-2】Redis数据类型
使用字符串(string)数据类型
使用列表 (list)数据类型,代号l
使用哈希 (hash)数据类型,代号h
使用集合(set)数据类型,代号s
使用有序集合(sorted set)数据类型,代号z
使用HyperLogLog数据类型,代号pf
使用Geo数据类型,代号geo
键管理
redis所有的key都是字符串类型
string类型
特点:存储单一结构的数据
#查看所有的key
127.0.0.1:6379> keys *
1) "age"
2) "name"
#通过name获取value
127.0.0.1:6379> get name
"woms"
#查看value长度
127.0.0.1:6379> strlen name
(integer) 4
#如果name不存在返回nil
127.0.0.1:6379> get hello
(nil)
#append在末尾添加,如果name不存在,会创建一个空字符串,再去拼接
127.0.0.1:6379> append name 123
(integer) 7
127.0.0.1:6379> get name
"woms123"
127.0.0.1:6379> append hello world
(integer) 5
127.0.0.1:6379> get hello
"world"
#查询name是否存在,存在返回1不存在返回0
127.0.0.1:6379> exists name
(integer) 1
#不希望在key存在的时候,盲目的覆盖,使用setnx,如果key不存在,保存成功,返回1,如果key存在,返回0
127.0.0.1:6379> setnx name woms456
(integer) 0
127.0.0.1:6379> setnx addr beijing
(integer) 1
#删除当前数据库中所有的key,flushall删除所有数据库中的key
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty list or set)
#mset/mget同时设置多个值,具有原子性
127.0.0.1:6379> mset name woms age 13 addr beijing
OK
127.0.0.1:6379> mget name age
1) "woms"
2) "13"
列表list类型
特点:有序可以重复列表
# 从左边插入两个值
127.0.0.1:6379> lpush name woms wms wumingsheng
(integer) 3
# 查询列表
127.0.0.1:6379> lrange name 0 -1
1) "wumingsheng"
2) "wms"
3) "woms"
# 从右端插入值
127.0.0.1:6379> lrange name 0 -1
1) "wumingsheng"
2) "wms"
3) "woms"
4) "122319"
#查看key的类型
127.0.0.1:6379> type name
list
#删除key
127.0.0.1:6379> del name
(integer) 1
# 在某一个值的前面、后面插入值
127.0.0.1:6379> lrange name 0 -1
1) "wumingsheng"
2) "wms"
3) "woms"
127.0.0.1:6379> linsert name after wms 122319
(integer) 4
127.0.0.1:6379> lrange name 0 -1
1) "wumingsheng"
2) "wms"
3) "122319"
4) "woms"
#查询指定索引位置的值,索引从0开始
127.0.0.1:6379> lindex name 2
"122319"
#lpushx、rpushx仅仅在列表存在的时候才插入值,key不存在,不插入值
127.0.0.1:6379> lpushx hello woms
(integer) 0
#lpop/rpop弹出一个元素
127.0.0.1:6379> lpop name
"bear"
#ltrim截取列表片段,通过索引,类似java中的string截取
127.0.0.1:6379> ltrim name 2 -1
OK
#lset设置指定索引位置的值
127.0.0.1:6379> lrange name 0 -1
1) "122319"
2) "woms"
127.0.0.1:6379> lset name 0 wms
OK
127.0.0.1:6379> lrange name 0 -1
1) "wms"
2) "woms"
哈希hash类型
特点:具有多属性的对象存储
#hmset设置多个字段-值,hset设置单个字段-值
127.0.0.1:6379> hmset wms name wumingsheng age 13 address beijing
OK
#hmget同时获取多个字段,hget获取一个字段
127.0.0.1:6379> hmget wms name age address
1) "wumingsheng"
2) "13"
3) "beijing"
127.0.0.1:6379> hget wms name
"wumingsheng"
#hexists查询key中是否存在某个字段
127.0.0.1:6379> hexists wms name
(integer) 1
#查询所有字段
127.0.0.1:6379> hgetall wms
1) "name"
2) "wumingsheng"
3) "age"
4) "13"
5) "address"
6) "beijing"
#删除某个字段
127.0.0.1:6379> hdel wms name
(integer) 1
hset和hmset会覆盖现在字段,hsetnx只有在字段不存在的时候才会设置字段的值
集合set类型
特点:无须,不可以重复
127.0.0.1:6379> keys *
(empty list or set)
#添加元素
127.0.0.1:6379> sadd name woms wms wumingsheng woms
(integer) 3
#查询元素的个数
127.0.0.1:6379> scard name
(integer) 3
#查看所有的元素
127.0.0.1:6379> smembers name
1) "woms"
2) "wumingsheng"
3) "wms"
#判断元素是否存在
127.0.0.1:6379> sismember name wms
(integer) 1
#删除元素
127.0.0.1:6379> srem name wms
(integer) 1
127.0.0.1:6379> sismember name wms
(integer) 0
redis提供了一组集合运算的相关命令
SUNION和SUNIONSTORE用于计算并集
SINTER和SINTERSTORE用于计算交集
SDIFF和SDIFFSTORE用于计算差集
不带STORE后缀的命令只返回相应操作的结果集合,带STROE后缀的命令则会将结果存储到一个指定的键中
有序集合(sorted set)类型
特点:不可以重复,带有权重分数所以有序
list:双向链条结构,有序可重复
set: 集合结构,无序不可以重复
zset: 集合结构所以不可以重复,有权重分数可以认为有序
#zadd添加元素
127.0.0.1:6379> zadd name 100 woms 90 wms 80 wumingsheng 70 woms
(integer) 3
#zrange和zrevrange命令获取排名
127.0.0.1:6379> zrevrange name 0 -1
1) "wms"
2) "wumingsheng"
3) "woms"
127.0.0.1:6379> zrevrange name 0 -1 withscores
1) "wms"
2) "90"
3) "wumingsheng"
4) "80"
5) "woms"
6) "70"
127.0.0.1:6379> zrange name 0 -1 withscores
1) "woms"
2) "70"
3) "wumingsheng"
4) "80"
5) "wms"
6) "90"
#zincrby key increment member 给集合元素添加权重分数
127.0.0.1:6379> zincrby name 5 woms
"75"
#zrank、zrevrank命令查看元素排名,zscore命令查看元素分数、权重
127.0.0.1:6379> zrank name woms
(integer) 0
127.0.0.1:6379> zrevrank name woms
(integer) 2
127.0.0.1:6379> zscore name woms
"75"
#ZUNIONSTORE命令用来合并两个集合
ZADD命令中使用NX选项,能够实现在不更新已存在的成员的情况下值添加新的成员 选项XX只更新存在的成员不添加新的元素 如果多个成员具有相同的分数权重,redis将按照字段顺序进行排序
HyperLogLog类型
特点:集合唯一计数
当数据量增大到上千万时候,考虑到内存消耗和性能下降问题,如果我们不需要获取数据集的内容,只是想得到不同值的个数,可以使用HyperLogLog(HLL) 优点:大集合唯一计数,消耗内存小,耗时短 缺点:可能不准确,标准差小于1% 适合数据量大,精确度要求低
# pfadd命令用来添加元素
127.0.0.1:6379> pfadd name woms
(integer) 1
127.0.0.1:6379> pfadd name wms wumingsheng
(integer) 1
#pfcount命令用来统计元素的个数
127.0.0.1:6379> pfcount name
(integer) 3
127.0.0.1:6379> pfadd name woms
(integer) 0
127.0.0.1:6379> pfcount name
(integer) 3
127.0.0.1:6379> pfadd name2 woms
(integer) 1
#pfmerge元素用来合并元素,排除重复的元素
127.0.0.1:6379> pfmerge nameall name name2
OK
127.0.0.1:6379> pfcount nameall
(integer) 3
GEO类型
特点:存储和查询地理位置坐标
#geoadd命令添加地理位置信息
127.0.0.1:6379> geoadd addr -121.896321 37.916750 "olive garden" -117.910937 33.804047 "P.F Changes" -118.508020 34.453276 "outback sthouse" -119.152439 34.264558 "Red lobster" -122.276909 39.458300 "longhorn charcoal pit"
(integer) 5
#geopos命令查询地理位置信息
127.0.0.1:6379> geopos addr "olive garden"
1) 1) "-121.89632266759872437"
2) "37.91675061080587028"
#georadius命令查询方圆5公里内的点
127.0.0.1:6379> georadius addr -121.923170 37.878506 5 km
1) "olive garden"
#georadiusbymember命令和georadius命令非常相似,都可以用来找出指定范围内的成员,但是georadiusbymember命令的中心点是geo集合中的一个成员,georadius是使用输入的经纬度来决定中心点的位置
127.0.0.1:6379> georadiusbymember addr "outback sthouse" 100 km
1) "Red lobster"
2) "outback sthouse"
3) "P.F Changes"
#geodist查询两点之间的距离
127.0.0.1:6379> geodist addr "P.F Changes" "outback sthouse" km
"90.7557"
GEORADIUS和GEORADIUSBYMEMBER命令中,
使用WITHDIST选项来得到距离
使用ASC/DESC选项来控制返回结果的升序或降序
使用STORE/STOREDIST选项还可以将结果存储到另一个GEO集合中
GEO集合实际上被存储到一个有序集合(ZSET),因此有序集合支持的所有命令可以用于GEO数据类型, 我们可以使用ZREM从集合中移除元素,也可以使用ZRANGE来获取所有的成员
键管理
#查询redis中key的个数
127.0.0.1:6379> dbsize
(integer) 0
#列出所有的key,可以使用keys命令,也可以使用scan命令
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> scan 0
1) "0"
2) (empty list or set)
#删除一个key,使用del命令,也可以使用unlink命令
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> unlink name
(integer) 1
#判断一个key是否存在
127.0.0.1:6379> exists name
(integer) 0
#判断一个key类型
127.0.0.1:6379> type name
string
#重命名一个key
127.0.0.1:6379> rename name name2
OK
#flushdb命令:删除当前数据库的所有key;
#flushall命令:删除所有数据库的所有key;
Last updated
Was this helpful?