Redis 数据类型

在Redis中字符串类型的Value最多可以容纳的数据长度是512M,这已经是相当的大了

一、string类型及string的一些方法

① 截取字符串

GETRANGE key start end

getrange test_key 0 2

② 替换字符串

SETRANGE KEY_NAME OFFSET VALUE

127.0.0.1:6379> get test_key
"test_valuehello word"
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> setrange test_key 8 xx
(integer) 20
127.0.0.1:6379> get test_key
"test_valxxhello word"

setrange 是从 OFFSET 的偏移量开始,替换VALUE的长度

③ setex 创建字符串并设置过期时间

127.0.0.1:6379> setex key1 30 key1_value ##创建键值对key1=>key1_value 过期时间30s
OK
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> ttl key1
(integer) 26
127.0.0.1:6379> ttl key1
(integer) 25

④  setnx 命令 创建键值对,如果key存在则不创建,如果key不存在则创建

127.0.0.1:6379> setnx key1 hha
(integer) 1
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> setnx key1 hha
(integer) 0
127.0.0.1:6379> setnx key2 hha
(integer) 1

⑤ mset 创建多个键值对

mset k1 v1 k2 v2 k3 v3 ##创建多个键值对
mget k1 k2 k3 ##获取多个键值对
msetnx k1 v1 k4 v4 ##msetnx也可以创建多个,但是msetnx支持原子性,要不全部创建成功,要不全部创建失败

⑥ getset 先get然后set

127.0.0.1:6379> getset k1 helloword
"v1"
127.0.0.1:6379> get k1
"helloword"

二、list类型

 list实际是一个链表,before Node after, left right都可以插入值

如果key不存在,创建新的链表

如果key存在,新增内容

如果移除了所有值,空链表,也代表不存在

在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点

list 的元素个数最多为2^32-1个,也就是4294967295个

① 往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> 
127.0.0.1:6379> 
127.0.0.1:6379> lrange list 0 -1 ##遍历这个list
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> rpush list zero ##往右添加
(integer) 4
127.0.0.1:6379> 
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "zero"
127.0.0.1:6379> 

 ② 移除值

127.0.0.1:6379> lpop list  ##最左边的移除
"three"
127.0.0.1:6379> rpop list  ##从最右边移除
"zero"

③ 通过下标获取list中的某一个值

127.0.0.1:6379> lindex list 0  ##从list 取出下标0的
"two"
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> lindex list 1

获取list的长度 

127.0.0.1:6379> llen list
(integer) 2
127.0.0.1:6379>

④ 截取指定的list

1) "hello"
2) "hello1"
3) "hello2"
4) "hello3"

127.0.0.1:6379> ltrim mylist 1 2 ### 从1开始,2结束截取, list已经被修改了
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"
127.0.0.1:6379> 

⑤ rpoplpush 移除列表的最后一个元素放到新的列表中

127.0.0.1:6379> rpush mylist hello
(integer) 1
127.0.0.1:6379> rpush mylist hello1
(integer) 2
127.0.0.1:6379> rpush mylist hello2
(integer) 3
127.0.0.1:6379> rpoplpush mylist myotherlist  ##移除列表的最后一个元素放到新的列表中
"hello2"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello1"
127.0.0.1:6379> lrange myotherlist 0 -1
1) "hello2"
127.0.0.1:6379> 

⑥ lset 命令 将list指定下标的值指定为另外一个值 

127.0.0.1:6379> lset mylist 0 hello_hha  ##更新操作
OK 
127.0.0.1:6379> lrange mylist 0 -2
1) "hello_hha"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello_hha"
2) "hello1"
127.0.0.1:6379>

⑦ linsert 插入命令

127.0.0.1:6379> rpush mylist hello
(integer) 1
127.0.0.1:6379> rpush mylist world
(integer) 2
127.0.0.1:6379> 
127.0.0.1:6379> linsert mylist before "world" "world2"  ##向mylist中的world前插入元素world2
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world2"
3) "world"
127.0.0.1:6379> 
127.0.0.1:6379> linsert mylist after "world" "world1" ##向mylist中的world后插入元素world1
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world2"
3) "world"
4) "world1"
127.0.0.1:6379>

三、set数据类型

① set的基本用法 

127.0.0.1:6379> sadd myset hello  ##set添加一个数据
(integer) 1
127.0.0.1:6379> sadd myset haha
(integer) 1
127.0.0.1:6379> sadd myset bzhan
(integer) 1
127.0.0.1:6379> smembers myset    ##查看set的所有数据
1) "hello"
2) "bzhan"
3) "haha"
127.0.0.1:6379> sismember myset hello ##判断set是否存在某个值
(integer) 1
127.0.0.1:6379> sismember myset world
(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> smembers myset
1) "bzhan"
2) "haha"
127.0.0.1:6379>
127.0.0.1:6379> SRANDMEMBER myset  ##随机取出一个数据
"bzhan"
127.0.0.1:6379> SRANDMEMBER myset 
"haha"
127.0.0.1:6379> SRANDMEMBER myset 
"bzhan"
127.0.0.1:6379> SRANDMEMBER myset 
"haha"
127.0.0.1:6379> SRANDMEMBER myset 2 ##随机取出2个数据
1) "bzhan"
2) "haha"
127.0.0.1:6379> 

 ② 随机取出一个元素并删除

127.0.0.1:6379> SMEMBERS myset
1) "bzhan"
2) "haha"
127.0.0.1:6379> sadd myset set01
(integer) 1
127.0.0.1:6379> sadd myset set02
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "set01"
2) "bzhan"
3) "set02"
4) "haha"
127.0.0.1:6379> 
127.0.0.1:6379> spop myset #随机取出一个元素并删除
"set01"
127.0.0.1:6379> spop myset #随机取出一个元素并删除
"set02"
127.0.0.1:6379> 

③ 移动一个set的某个元素进入另外一个set

127.0.0.1:6379> sadd myset hello
(integer) 1
127.0.0.1:6379> sadd myset word
(integer) 1
127.0.0.1:6379> sadd myset hha
(integer) 1
127.0.0.1:6379> sadd myset2 set2
(integer) 1
127.0.0.1:6379> smove myset myset2 hha  ##smove 源set 目标set 元素
(integer) 1
127.0.0.1:6379> smembers myset
1) "hello"
2) "word"
127.0.0.1:6379> smembers myset2
1) "hha"
2) "set2"

④ set的交集、差集、并集

127.0.0.1:6379> sadd myset a  
(integer) 1
127.0.0.1:6379> sadd myset b
(integer) 1
127.0.0.1:6379> sadd myset c
(integer) 1
127.0.0.1:6379> sadd myset1 c
(integer) 1
127.0.0.1:6379> sadd myset1 e
(integer) 1
127.0.0.1:6379> sadd myset1 f
(integer) 1
127.0.0.1:6379> sdiff myset myset1 ##差集
1) "a"
2) "b"
127.0.0.1:6379> sdiff myse1 myset
(empty list or set)
127.0.0.1:6379> sdiff myset1 myset
1) "e"
2) "f"
127.0.0.1:6379> sinter myset1 myset ##交集
1) "c"
127.0.0.1:6379> sunion myset1 myset ##并集
1) "c"
2) "f"
3) "b"
4) "e"
5) "a"
127.0.0.1:6379> 

四、hash数据类型

①hash基本操作 

127.0.0.1:6379> hset myhash key1 v1  ##添加一个hash,myhash,并放入元素 key1 v1
(integer) 1
127.0.0.1:6379> hset myhash key1 v2
(integer) 0
127.0.0.1:6379> hget myhash key1 ## 返回myhash中的key1对应的值
"v2"
127.0.0.1:6379> hmset myhash key2 v2 key3 v3 ##添加多个键值对
OK
127.0.0.1:6379> hgetall myhash  ##打印全部的hash值
1) "key1"
2) "v2"
3) "key2"
4) "v2"
5) "key3"
6) "v3"
127.0.0.1:6379>
127.0.0.1:6379> hdel myhash key1   ##删除hash指定的key
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "key2"
2) "v2"
3) "key3"
4) "v3"
127.0.0.1:6379> hlen myhash  ##获取hash的长度
(integer) 2
127.0.0.1:6379> hexists myhash key1  ##判断hash里面的key是否存在
(integer) 0
127.0.0.1:6379> hexists myhash key2  ##判断hash里面的key是否存在
(integer) 1

② 获取所有的key和val

127.0.0.1:6379> hkeys myhash  ##获取所有的key
1) "key2"
2) "key3"
127.0.0.1:6379> hvals myhash  ##获取所有的val
1) "v2"
2) "v3"

③ 步长操作

127.0.0.1:6379> hset myhash field 5  ##
(integer) 1
127.0.0.1:6379> hincrby myhash field 1 ##hash中的指定值 + 1
(integer) 6
127.0.0.1:6379> hincrby myhash field 1
(integer) 7
127.0.0.1:6379> hincrby myhash field -2 ##hash中的指定值 - 2
(integer) 5
127.0.0.1:6379> hsetnx myhash field4 hello  ##如果hash不存在则添加
(integer) 1
127.0.0.1:6379> hsetnx myhash field4 world  ##如果hash存在则不添加
(integer) 0

五、zset有序集合

①基本操作

127.0.0.1:6379> zadd myzset 1 one 2 two 3 three 4 four 5 five ##添加 跟set不同的是,前面多了一个数字,用于排序
(integer) 5
127.0.0.1:6379> zrange myzset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
127.0.0.1:6379> zadd myzset 1 one1
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1
1) "one"
2) "one1"
3) "two"
4) "three"
5) "four"
6) "five"
127.0.0.1:6379> zrangebyscore myzset -inf +inf ##正序排序
1) "one"
2) "one1"
3) "two"
4) "three"
5) "four"
6) "five"
127.0.0.1:6379> zrangebyscore myzset -inf +inf withscores ##score和值都取出来
 1) "one"
 2) "1"
 3) "one1"
 4) "1"
 5) "two"
 6) "2"
 7) "three"
 8) "3"
 9) "four"
10) "4"
11) "five"
12) "5"
127.0.0.1:6379> zrevrange myzset 0 -1 ##倒序输出
1) "five"
2) "four"
3) "three"
4) "two"
5) "one1"
6) "one"
127.0.0.1:6379>

 ②移除

127.0.0.1:6379> zrem myzset one1 ##移除
(integer) 1
127.0.0.1:6379> zrevrange myzset 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
5) "one"
127.0.0.1:6379>

③ 集合的元素数量

127.0.0.1:6379> zcard myzset
(integer) 5

④ 获取区间的元素数量

127.0.0.1:6379> zcount myzset 1 2
(integer) 2
127.0.0.1:6379> zcount myzset 0 100
(integer) 5
127.0.0.1:6379> 

六、地理空间(geospatial) 数据类型

127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing ##添加北京的经纬度
(integer) 1
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai ##添加上海的经纬度
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing ##添加重庆的经纬度
(integer) 1
127.0.0.1:6379> geoadd china:city 114.05 22.52 shengzhen ##添加深圳的经纬度
(integer) 1
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou ##添加杭州的经纬度
(integer) 1
127.0.0.1:6379> geopos china:city beijing ##获取北京的经纬度
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
127.0.0.1:6379> geodist china:city beijing shanghai km  ##获取北京和上海的直线距离
"1067.3788"
127.0.0.1:6379> georadius china:city 110 30 1000 km ##经纬度110 30方圆1000km的城市
1) "chongqing"
2) "shengzhen"
3) "hangzhou"
127.0.0.1:6379> georadius china:city 110 30 1000 km withdist ##获取经纬度110 30方圆1000km的城市和距离
1) 1) "chongqing"
   2) "341.9374"
2) 1) "shengzhen"
   2) "924.6408"
3) 1) "hangzhou"
   2) "977.5143"
127.0.0.1:6379> georadius china:city 110 30 1000 km withcoord ##获取经纬度110 30方圆1000km的城市和经纬度
1) 1) "chongqing"
   2) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "shengzhen"
   2) 1) "114.04999762773513794"
      2) "22.5200000879503861"
3) 1) "hangzhou"
   2) 1) "120.1600000262260437"
      2) "30.2400003229490224"
127.0.0.1:6379> georadius china:city 110 30 1000 km withcoord count 1 ##可以加count 的个数限制
1) 1) "chongqing"
   2) 1) "106.49999767541885376"
      2) "29.52999957900659211"
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km ##找到以北京为中心 1000km的城市
1) "beijing"

geospatial在redis中其实是用zset存储的,所以删除可以用zrem, 可以用zset命令来操作geospatial对象

127.0.0.1:6379> zrange china:city 0 -1
1) "chongqing"
2) "shengzhen"
3) "hangzhou"
4) "shanghai"
5) "beijing"

七、hyperloglog基数统计

目的是做基数统计,故不是集合,不会保存元数据,只记录数量而不是数值 

127.0.0.1:6379> pfadd mykey a b c d e f g h i j ##添加一组元素
(integer) 1
127.0.0.1:6379> pfcount mykey ###统计元素的 基数数量
(integer) 10
127.0.0.1:6379> pfadd mykey i j z x c v b 
(integer) 1
127.0.0.1:6379> pfcount mykey
(integer) 13
127.0.0.1:6379> pfcount mykey2 n m i j z
(integer) 0
127.0.0.1:6379> pfadd mykey2 n m i j z
(integer) 1
127.0.0.1:6379> pfmerge mykey3 mykey mykey2 ##合并两组基数 mykey mykey2
OK
127.0.0.1:6379> pfcount mykey3
(integer) 15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值