Redis的5种基本数据类型&3种特殊类型

1.Redis对key的操作命令

    localhost:6379> dbsize
    (integer) 0
    localhost:6379> set name tandeshi
    OK
    localhost:6379> set age 18
    OK
    localhost:6379> dbsize 
    (integer) 2
    localhost:6379> exists name  #判断key是否存在
    (integer) 1
    localhost:6379> del name      #删除key
    (integer) 1
    localhost:6379> exists name
    (integer) 0
    localhost:6379> set name tandehsi
    OK
    localhost:6379> move name 1   #移动key到指定的数据库
    (integer) 1
    localhost:6379> exists name    
    (integer) 0
    localhost:6379> keys *
    1) "age"
    localhost:6379> expire age 10   #设置key的过期时间(秒)
    (integer) 1
    localhost:6379> ttl age         #获取key的剩余时间
   (integer) 5
   localhost:6379> ttl age
   (integer) 4
   localhost:6379> ttl age
   (integer) 3
   localhost:6379> expire age 10
   (integer) 0
   localhost:6379> expire age 10
   (integer) 0
   localhost:6379> exists name
   (integer) 0
   localhost:6379> keys *       #查找所有的key
   (empty array)

   localhost:6379> set name tandeshi
   OK
   localhost:6379> type name     #查看key的类型
   string
 

2.string类型

   localhost:6379> set name tandeshi
   OK
   localhost:6379> strlen name    #获取字符串长度
   (integer) 8
   localhost:6379> append name ,handsome  #在字符串后面追加字符串
  (integer) 17
  localhost:6379> get name
 "tandeshi,handsome"
  localhost:6379> set age 10
  OK
  localhost:6379> incr age     #自增1
  (integer) 11
  localhost:6379> decr age     #自减1
 (integer) 10
 localhost:6379> incrby age 10  #自增指定的步长
 (integer) 20
 localhost:6379> decrby age 10   #自减指定的步长
 (integer) 10
 localhost:6379> 

localhost:6379> get name
"tandeshi,handsome"
localhost:6379> getrange name 0 3     #截取字符转,闭合
"tand"
localhost:6379> getrange name 0 -1    #截取全部字符串
"tandeshi,handsome"
localhost:6379> setrange name 0 xxx   #替换某个字符串
(integer) 17
localhost:6379> get name
"xxxdeshi,handsome"
localhost:6379> 

localhost:6379> keys *
1) "name"
2) "age"
localhost:6379> setex k1 30 v1    #设置过期时间
OK
localhost:6379> ttl k1
(integer) 25
localhost:6379> keys *
1) "age"
2) "k1"
localhost:6379> setnx k1 v111      #不存在才会设置
(integer) 0
localhost:6379> get k1
"aa"
localhost:6379> 
 

localhost:6379> flushdb
OK
localhost:6379> keys *
(empty array)
localhost:6379> mset k1 v1 k2 v2 k3 v3   #同时设置多个值
OK
localhost:6379> mget k1 k2 k3               #同时获取多个值
1) "v1"
2) "v2"
3) "v3"
localhost:6379> msetnx k1 v11 k4 v4     #不存在则同时设置多个值,具有原子特性
(integer) 0
localhost:6379> keys * 
1) "k2"
2) "k1"
3) "k3"
localhost:6379> 

localhost:6379> set name tandehsi
OK
localhost:6379> get name 
"tandehsi"
localhost:6379> getset age 10     #不存在则返回null
(nil)
localhost:6379> getset name tandeshi11   #存在则返回原来的值,并设置新值
"tandehsi"
localhost:6379> get name 
"tandeshi11"
localhost:6379> 
 

3. List,双向链表, 有序可重复, 可充栈,队列,阻塞队列, 所有命令都是以 l 开头;

127.0.0.1:6379> lpush list one two three    #向列表首部插入一个或多个元素
(integer) 3
127.0.0.1:6379> exists list                             #判断列表是否存在
(integer) 1
127.0.0.1:6379> lrange list 0 -1                     #获取列表指定下标范围的元素,闭合
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> rpush list right                   #添一个或多个元素到列表尾部
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lpop list                               #弹出列表首部元素
"three"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "right"
127.0.0.1:6379> rpop list                              #弹出列表尾部元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lindex list 0                        #获取列表指定下标的元素
"two"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> llen list                               #获取列表的长度
(integer) 2
127.0.0.1:6379> lrem list 1 two                   #移除列表中指定个数的value值
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lpush two three
(integer) 1
127.0.0.1:6379> lpush list two three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> ltrim list 0 1                      #截取列表指定的下标范围,闭合
OK
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
127.0.0.1:6379> rpoplpush list otherlist    #移除列表首部元素添加到另一个列表中
"two"
127.0.0.1:6379> lrange list 0 -1
1) "three"
127.0.0.1:6379> lrange otherlist 0 -1         
1) "two"
127.0.0.1:6379> lset list 0 twotwo           #替换列表中指定下标的值,列表不存在或指定下标不存在会报错
OK
127.0.0.1:6379> lrange list 0 -1
1) "twotwo"
127.0.0.1:6379> linsert list before twotwo three   #在列表某个元素的前面或后面插入一个或多个值
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "twotwo"
127.0.0.1:6379> linsert list after twotwo one
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "twotwo"
3) "one"
127.0.0.1:6379> 

 

4. Set , 无序不可重复的集合, 命令都以s开头

127.0.0.1:6379> sismember myset a                      #判断集合中是否存在指定元素
(integer) 1
127.0.0.1:6379> sismember myset c
(integer) 0
127.0.0.1:6379> scard myset                                 #统计集合中的元素个数
(integer) 2
127.0.0.1:6379> smembers myset
1) "a"
2) "b"
127.0.0.1:6379> srandmember myset                    #随机获取集合中的一个元素
"b"
127.0.0.1:6379> sadd myset c
(integer) 1
127.0.0.1:6379> sadd myset d
(integer) 1
127.0.0.1:6379> srandmember myset
"b"
127.0.0.1:6379> smembers myset                           #获取集合中的所有元素
1) "a"
2) "d"
3) "b"
4) "c"
127.0.0.1:6379> srandmember myset
"d"
127.0.0.1:6379> srandmember myset
"b"
127.0.0.1:6379> smembers myset
1) "a"
2) "d"
3) "b"
4) "c"
127.0.0.1:6379> srandmember myset 3                     #获取集合中指定个数的元素
1) "a"
2) "d"
3) "c"
127.0.0.1:6379> srandmember myset 3
1) "d"
2) "b"
3) "c"
127.0.0.1:6379> srem myset a                                  #移除集合中指定的值
(integer) 1
127.0.0.1:6379> smembers myset
1) "d"
2) "b"
3) "c"
127.0.0.1:6379> spop myset                                   #随机移除集合中的一个值
"b"
127.0.0.1:6379> spop myset
"d"
127.0.0.1:6379> smembers myset
1) "c"
127.0.0.1:6379> sadd myset a b d a                       #增加元素到集合中
(integer) 3
127.0.0.1:6379> smembers myset
1) "a"
2) "d"
3) "b"
4) "c"
127.0.0.1:6379> smove myset othermyset a         #移动集合中的元素到另一个元素
(integer) 1
127.0.0.1:6379> smembers myset
1) "d"
2) "b"
3) "c"
127.0.0.1:6379> smembers othermyset
1) "a"
127.0.0.1:6379> sadd othermyset b c
(integer) 2
127.0.0.1:6379> smembers othermyset
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> sdiff myset othermyset             #差集
1) "d"
127.0.0.1:6379> sinter myset othermyset           #交集
1) "b"
2) "c"
127.0.0.1:6379> sunion myset othermyset          #并集
1) "d"
2) "b"
3) "c"
4) "a"
127.0.0.1:6379> 

 

5. Hash, 本质上是key-Map


127.0.0.1:6379> hset myhash k1 v1 k2 v2                                #设值
(integer) 2
127.0.0.1:6379> hget myhash k1                                               #取值
"v1"
127.0.0.1:6379> hgetall myhash                                               # 获取所有的 k,v
1) "k1"
2) "v1"
3) "k2"
4) "v2"
127.0.0.1:6379> hdel myhash k1                                              #根据 k 删值
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "k2"                           
2) "v2"
127.0.0.1:6379> hlen myhash                                                  #取 k 的个数
(integer) 1
127.0.0.1:6379> hexists myhash k1
(integer) 0
127.0.0.1:6379> hexists myhash k2                                        #判断 k 是否存在
(integer) 1
127.0.0.1:6379> hmset myhash k1 v1 k3 3
OK
127.0.0.1:6379> hkeys my                                                      #获取所有的 k
1) "k2"
2) "k1"
3) "k3"
127.0.0.1:6379> hvals myhash                                                #获取所有的 v
1) "v2"
2) "v1"
3) "3"
127.0.0.1:6379> hsetnx myhash k1 v11                                   #不存在才能设值
(integer) 0
127.0.0.1:6379> hsetnx myhash k4 v4
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "k2"
2) "v2"
3) "k1"
4) "v1"
5) "k3"
6) "3"
7) "k4"
8) "v4"
127.0.0.1:6379> hincrby myhash k3 1                                      #根据步长增加指定的 k 的 v
(integer) 4
127.0.0.1:6379> hincrby myhash k3 -1
(integer) 3
127.0.0.1:6379> 

 

6. Zset , 有序不可重复集合

127.0.0.1:6379> zadd zset 1 k1 2 k2 3 k3 4 k4                             #支持批量设值
(integer) 4
127.0.0.1:6379> zrange zset 0 -1                                                  #获取无序集合中的所有元素
1) "k1" 
2) "k2"
3) "k3"
4) "k4"
127.0.0.1:6379> zrangebyscore zset -inf +inf                               #升序排列获取无序集合中的元素
1) "k1"                 
2) "k2"
3) "k3"
4) "k4"
127.0.0.1:6379> zrangebyscore zset -inf +inf withscores               #升序排列获取无序集合中的元素,附带score
1) "k1"
2) "1"
3) "k2"
4) "2"
5) "k3"
6) "3"
7) "k4"
8) "4"
127.0.0.1:6379> zrem zset k1                                                        #删除无序集合中指定元素
(integer) 1
127.0.0.1:6379> zrangebyscore zset -inf +inf withscores
1) "k2"
2) "2"
3) "k3"
4) "3"
5) "k4"
6) "4"
127.0.0.1:6379> zcard zset                                                            #统计无序集合中的元素个数
(integer) 3
127.0.0.1:6379> zrevrange zset 0 -1                                              #降序获取无序集合中的元素
1) "k4"
2) "k3"
3) "k2"
127.0.0.1:6379> zcount zset 2 3                                                    #统计给定区间的元素个数
(integer) 2
127.0.0.1:6379> 

 

7. geospatial,地理空间,可用于朋友的定位,附近的人,打车距离计算

    官方文档: https://www.redis.net.cn/

127.0.0.1:6379> geoadd china:city 10 10 a 20 20 b 30 30 c 40 40 d          # 添加地理位置到key中
(integer) 4
127.0.0.1:6379> geopos china:city a                                                           # 获取key中指定的元素
1) 1) "10.00000208616256714"
   2) "10.00000092823272979"
127.0.0.1:6379> geodist china:city a b km                                                   #计算key中两元素的距离
"1545.1933"
127.0.0.1:6379> georadius china:city 15 15 500 km withcoord withdist       
(empty array)
127.0.0.1:6379> georadius china:city 15 15 5000 km withcoord withdist     #获取指定纬经度,一定半径内key中的元素
1) 1) "a"
   2) "777.0791"
   3) 1) "10.00000208616256714"
      2) "10.00000092823272979"
2) 1) "b"
   2) "768.3425"
   3) 1) "20.00000149011611938"
      2) "20.00000058910486445"
3) 1) "c"
   2) "2266.4514"
   3) 1) "30.00000089406967163"
      2) "30.00000024997701331"
4) 1) "d"
   2) "3690.1908"
   3) 1) "40.00000029802322388"
      2) "39.99999991084916218"
127.0.0.1:6379> georadiusbymember china:city a 2000 km withcoord withdist   # 获取key中某一元素一定半径内的元素
1) 1) "a"
   2) "0.0000"
   3) 1) "10.00000208616256714"
      2) "10.00000092823272979"
2) 1) "b"
   2) "1545.1933"
   3) 1) "20.00000149011611938"
      2) "20.00000058910486445"
127.0.0.1:6379> 

 

8.Hyperloglog , 基数(集合中不重复的元素个数)统计, 内存固定,12KB,可存储2^64个不同的元素

   应用 a. 网页的访问量

127.0.0.1:6379> pfadd hyperloglog a b c d e                  #添加基数
(integer) 1
127.0.0.1:6379> pfcount hyperloglog                              #统计基数个数
(integer) 5
127.0.0.1:6379> pfadd hyperloglog a
(integer) 0
127.0.0.1:6379> pfadd hyperloglog1 d e f g
(integer) 1
127.0.0.1:6379> pfcount hyperloglog1
(integer) 4
127.0.0.1:6379> pfmerge hyperloglog2 hyperloglog hyperloglog1               #合并集合
OK
127.0.0.1:6379> pfcount hyperloglog2
(integer) 7
127.0.0.1:6379> 
 

9. Bitmaps , 位图,操作二进制位来记录,应用于两种状态的统计

    应用: 统计用户的信息   a. 活跃, 不活跃   b. 登陆, 不登陆   c. 打卡, 不打卡

统计一周的打卡情况

127.0.0.1:6379> setbit sign 0 1                  #设置
(integer) 0
127.0.0.1:6379> setbit sign 1 1
(integer) 0
127.0.0.1:6379> setbit sign 2 1
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 0
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0
127.0.0.1:6379> getbit sign 0                       #获取值
(integer) 1
127.0.0.1:6379> getbit sign 2
(integer) 1
127.0.0.1:6379> getbit sign 4
(integer) 0
127.0.0.1:6379> bitcount sign                      #统计
(integer) 4
127.0.0.1:6379> 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值