Redis8种基本类型

Redis常用命令

1. 启动、重启、停止、查看状态命令

systemctl start redis
systemctl restart redis
systemctl stop redis
systemctl status redis
# 指定配置文件启动redis
redis-server redis-conf  

2.关闭Redis

redis-cli shutdown

3.连接Redis

redis-cli

4.远程连接Redis

redis-cli -h ip地址 -p 6379                     redis无配置密码情况下
redis-cli -h ip地址 -p 6379 -a redis配置密码     redis有配置密码情况下

5.退出连接

exit

6.查询所有key

keys *

7.判断key是否存在

exists key

8.根据key设置过期时间

expire key time(单位是秒)

9.查看当前key的剩余过期时间

tll key 

10.查看当前key的类型

type key 

11. 删除一个或者多个key

del key .... 

Redis的8中基本类型

1.String(字符串)

1.插入

set key string #插入string无时间限制
setex key time string #(set with expire)插入并设置有效时间为time 单位是表
setnx key string # (set if not exist) 先判断是否存在,不存在在
插入 经常使用在分布式锁中

2.字符拼接(后缀)如果不存在相当于set

append key string

3.查询字符长度

strlen key

4.自增(数据格式)

incr key (自增1)
incr key 10 #自增10

5.自减

decr key (自减1)
decr key 10 #自减10

6.字符串范围

getrange key 0 3 (截取下标0到3的数据)
getrange key 0 -1 #截取全部,相当于get

7.替换

setrange key 1 xx (替换下标从1开始的2个字符,xx多长替换多少个字符)

8.批量插入

mset k1 v1 k2 v2 k3 v3

9.批量查询

mget k1 k2 k3

10.先查询后插入

getset k1  v2 #查询k1的值,为空返回nil 并把k1的值改成v2

String的使用场景:value除了是字符串以外还可以是数字

  • 计数器
  • 统计多单位的数量
  • 粉丝数
  • 对象缓存储存

2.List

基本的数据类型,列表
在Redis中可以把list用作栈、队列、阻塞队列。
list命令多数以l开头。
1.插入

lpush key v1 v2 v3 #将一个值或者多个值,
插入到列表的头部 (左边加下标都是0)
127.0.0.1:6379> lpush list v1 v2 v3
(integer) 3
rpush key right #将一个值或者多个值,插入到列表的尾部
127.0.0.1:6379> rpush list v4 v5
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"
3) "v1"
4) "v4"
5) "v5"

2.查询

lrange key 0 -1 #查询全部
lrange key 0 1 #查询区间内的值 结果为v3 v2

3.移除

#移除并返回第一个元素 及下标为0的
127.0.0.1:6379> lpop key
"v3"
#移除并返回最后一个
127.0.0.1:6379> rpop key
"v5"
#移除集合中指定个数的value,精确匹配
lrem key 1 v2 移除一个值为v2的值
lrem key 2 v3 移除两个值为v3的值

4.索引:Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素

lindex list 1

5.长度 Llen

127.0.0.1:6379> llen list
(integer) 3

6.trim 截断, 通过下标截取指定长度,这个list已经被破坏了,截断之后只剩下截断后的元素

127.0.0.1:6379>ltrim list 1 2
ok

7.rpoplpush :移除列表的最后一个元素,将他移动到新的列表中。

127.0.0.1:6379>ltrim list 1 2
ok
127.0.0.1:6379> lrange list 0 -1
1) "v1"
2) "v4"

8.lset:将列表中指定下标的值替换为另一个值,更新操作

127.0.0.1:6379> lrange list 0 -1
1) "v1"
2) "v4"
127.0.0.1:6379> exists list
(integer) 1
127.0.0.1:6379> lset list 0 v0
OK
127.0.0.1:6379> lrange list 0 -1
1) "v0"
2) "v4"

9.linsert:将某个具体的value插入到列表中某个元素的前面或者后面

127.0.0.1:6379> lrange list 0 -1
1) "v0"
2) "v4"
127.0.0.1:6379> linsert list after v0 v1
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "v0"
2) "v1"
3) "v4"
127.0.0.1:6379> linsert list before v4 v3
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "v0"
2) "v1"
3) "v3"
4) "v4"
127.0.0.1:6379> 

小结

  • list实际上是一个链表,前后都可以插入
  • 如果key不存在,创建新的链表
  • 如果移除了所有的值,空链表,也代表不存在
  • 在两边插入获取改动值,效率最高

3、Set(集合)

1.sadd: 集合中添加元素

127.0.0.1:6379> sadd set set1
(integer) 1
127.0.0.1:6379> sadd set set2 set3
(integer) 2

2.smembers: 查询所有值

127.0.0.1:6379> smembers set
1) "set3"
2) "set2"
3) "set1"

3.sismember:判断某个值是否存在

127.0.0.1:6379> sismember set set4
(integer) 0
127.0.0.1:6379> sismember set set1
(integer) 1

4.scard:获取集合中的个数(长度)

127.0.0.1:6379> scard set
(integer) 3

5.srem:移除一个或多个元素

127.0.0.1:6379> srem set set1
(integer) 1
127.0.0.1:6379> smembers set
1) "set3"
2) "set2"
127.0.0.1:6379> sadd set set1 set4 set5
(integer) 3
127.0.0.1:6379> srem set set4 set5
(integer) 2

6.srandmember:随机抽取一个或指定个数的值

127.0.0.1:6379> srandmember set
"set2"
127.0.0.1:6379> smembers set
1) "set2"
2) "set3"
3) "set1"
127.0.0.1:6379> srandmember set 2
1) "set3"
2) "set2"

7.spop:随机删除一个或指定个数的元素

127.0.0.1:6379> spop set
"set2"
127.0.0.1:6379> smembers set
1) "set3"
2) "set1"
127.0.0.1:6379> spop set 2

8.smove:把指定的值,移动到另一个集合中

127.0.0.1:6379> smembers set
1) "set3"
2) "set1"
127.0.0.1:6379> smove set set1 set3
(integer) 1
127.0.0.1:6379> smembers set1
1) "set3"
127.0.0.1:6379> smembers set
1) "set1"

9.sdiff:比较两个或多个集合与第一个集合的差集

127.0.0.1:6379> smembers set1
1) "set3"
127.0.0.1:6379> smembers set
1) "set1"
127.0.0.1:6379> sdiff set set1
1) "set1"
127.0.0.1:6379> sadd set2 a b
(integer) 2
127.0.0.1:6379> sdiff set2 set1 set
1) "a"
2) "b"

4、Hash(哈希)

也是Key-value形式的,但是value是一个map
1.hset:添加一个或多个key-value

127.0.0.1:6379> hset myhash f fancg
(integer) 1
127.0.0.1:6379> hset myhash f2 fancg w wangyang
(integer) 2

2.hget:查询一个

127.0.0.1:6379> hget myhash f
"fancg"

3.hmget:查询多个

127.0.0.1:6379> hmget myhash f f1 w
1) "fancg"
2) (nil)
3) "wangyang"

4.hgetall:查询全部

127.0.0.1:6379> hgetall myhash
1) "f"
2) "fancg"
3) "f2"
4) "fancg"
5) "w"
6) "wangyang"

5.hdel: 删除一个或者多个

127.0.0.1:6379> hdel myhash f2 w
(integer) 2

6.hlen: 获取hash长度

127.0.0.1:6379> hlen myhash
(integer) 4

7.hexistes: 判断指定的key是否存在

127.0.0.1:6379> hexists myhash f3
(integer) 1
127.0.0.1:6379> hexists myhash ff
(integer) 0

8.hkeys: 查询所有的key

127.0.0.1:6379> hkeys myhash
1) "f"
2) "f2"
3) "f3"
4) "f4"

9.hincrby: 指定增量

127.0.0.1:6379> hset myhash f5 2
(integer) 1
127.0.0.1:6379> hincrby myhash f5 2
(integer) 4
127.0.0.1:6379> hincrby myhash f5 3
(integer) 7
127.0.0.1:6379> hincrby myhash f5 -1
(integer) 6

9.hincrby: 指定增量

127.0.0.1:6379> hset myhash f5 2
(integer) 1
127.0.0.1:6379> hincrby myhash f5 2
(integer) 4
127.0.0.1:6379> hincrby myhash f5 3
(integer) 7
127.0.0.1:6379> hincrby myhash f5 -1
(integer) 6

10.hsetnx: 如果不存在则可以设置,存在不能设置

127.0.0.1:6379> hsetnx myhash f1 wangy
(integer) 1
127.0.0.1:6379> hsetnx myhash f1 wangy
(integer) 0
127.0.0.1:6379> hsetnx myhash f1 wf
(integer) 0

5、zset(有序集合)

1.插入一个或者多个值

127.0.0.1:6379> zadd myzset 9 nine 4 four 5 five 1 one
(integer) 4
127.0.0.1:6379> zadd myzset 2 two
(integer) 1

2.zrange: 分页查询、查所有(默认从小到大key)

127.0.0.1:6379> zrange myzset 0 -1
1) "one"
2) "two"
3) "four"
4) "five"
5) "nine"
127.0.0.1:6379> zrange myzset 0 2
1) "one"
2) "two"
3) "four"

3.zrangebyscore: 从小到大线上所有

127.0.0.1:6379> zrangebyscore myzset -inf +inf
1) "one"
2) "two"
3) "four"
4) "five"
5) "nine"

4.zrevrange: 从大到小排序

127.0.0.1:6379> zrevrange myzset 0 -1
1) "nine"
2) "five"
3) "four"
4) "two"
5) "one"

5.zrangebyscore key -inf +inf withscores :查询key和value,key 从小到大排列

127.0.0.1:6379> zrangebyscore myzset -inf +inf withscores
 1) "one"
 2) "1"
 3) "two"
 4) "2"
 5) "four"
 6) "4"
 7) "five"
 8) "5"
 9) "nine"
10) "9"
  1. zrangebyscore key -inf 5 withscores 查询key小于等于5的
127.0.0.1:6379> zrangebyscore myzset -inf 5 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "four"
6) "4"
7) "five"
8) "5"

7.zrem: 移除特定元素

127.0.0.1:6379> zrem myzset five
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1
1) "one"
2) "two"
3) "four"
4) "nine"

8.zcard: 获取有序集合的个数

127.0.0.1:6379> zcard myzset
(integer) 4

9.zcount: 获取指定区间的元素个数

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

6、geospatial(地理空间)

Redis在3.2推出Geo类型,该功能可以推算出地理位置信息,两地之间的距离。

  1. geoadd: 添加地理位置
    规则:两级无法直接添加,一般会下载城市数据,直接通过Java程序一次性导入。有效的经度从-180度和180度。有效的维度从-85.05112878度到85.05112878度。当坐标位置超出指定范围时,该命令将会返回一个错误。
127.0.0.1:6379> geoadd beijing 181 81
(error) ERR wrong number of arguments for 'geoadd' command
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 106.50 29.53 chongqing
(integer) 2
127.0.0.1:6379> geoadd china:city 114.05 22.52 shengzhen 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 3
  1. geopos: 获取当前定位坐标值
127.0.0.1:6379> geopos china:city xian
1) 1) "108.96000176668167114"
   2) "34.25999964418929977"
  1. geodist: 获取两个位置之间的距离
    单位:
  • m 表示单位为米
  • km 表示单位为千米
  • mi 表示单位为英里。
  • ft 表示单位为英尺
    如果不指定单位参数,默认单位是米
127.0.0.1:6379> geodist china:city beijing xian
"910056.5237"
127.0.0.1:6379> geodist china:city beijing xian km
"910.0565"
  1. georedius: 以给定的经纬度为中心,找出某一半径内的元素
  • 以110,30这个点为中心,寻找方圆1000Kmd 城市
127.0.0.1:6379> georadius china:city 110 30 1000 km
1) "chongqing"
2) "xian"
3) "shengzhen"
4) "hangzhou"
  • 显示城市的定位信息
127.0.0.1:6379> georadius china:city 110 30 500 km withcoord
1) 1) "chongqing"
   2) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xian"
   2) 1) "108.96000176668167114"
      2) "34.25999964418929977"
  • 显示到中心点的距离
127.0.0.1:6379> georadius china:city 110 30 500 km withdist
1) 1) "chongqing"
   2) "341.9374"
2) 1) "xian"
   2) "483.8340"
  • 显示到中心点的距离、坐标并指定个数的城市
127.0.0.1:6379> georadius china:city 110 30 500 km withdist withcoord count 1
1) 1) "chongqing"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
127.0.0.1:6379> georadius china:city 110 30 500 km withdish withcoord count 2
(error) ERR syntax error
127.0.0.1:6379> georadius china:city 110 30 500 km withdist withcoord count 2
1) 1) "chongqing"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xian"
   2) "483.8340"
   3) 1) "108.96000176668167114"
      2) "34.25999964418929977"
  1. georadiusbymember :找出指定元素周围的其他元素
127.0.0.1:6379> georadiusbymember china:city beijing 1000 km
1) "beijing"
2) "xian"
  1. geo底层实现原理其实就是zset,可以使用zset命令操作geo
127.0.0.1:6379> zrange china:city 0 -1
1) "chongqing"
2) "xian"
3) "shengzhen"
4) "hangzhou"
5) "shanghai"
6) "beijing"

7、hyperloglog(超级日志)

基数:数学上集合的元素个数,是不能重复的。
Redis2.8.9版本更新了hyperloglog数据结构,是基于基数统计的算法。
hyperloglog的优点是占用内存小,并且是固定的。储存2^64个不同元素的基数,只需要12KB的空间。但是也可能有0.81%的错误率。

127.0.0.1:6379> pfadd pf a a b b c d e f g  n m 
(integer) 1
127.0.0.1:6379> pfcount pf
(integer) 9
127.0.0.1:6379> pfadd pf2 m n y i o p
(integer) 1
127.0.0.1:6379> pfcount pf2
(integer) 6
127.0.0.1:6379> pfmerge pf3 pf pf2
OK
127.0.0.1:6379> pfcount pf3
(integer) 13

8、bitmap(位图)

bitmap就是通过最小的单位bit来进行0或者1的设置,表示某个元素对应的值或者状态,一个bit的值,或者是0,或者是1;也就是说一个bit能存储的最多信息是2。
bitmap 常用于统计用户 信息比如活跃粉丝数、登录和未登录、是否打开灯。

127.0.0.1:6379> setbit sign 0 1  # 周一打卡了(integer) 0
127.0.0.1:6379> setbit sign 1 0  # 周二未打卡(integer) 0
127.0.0.1:6379> setbit sign 2 0  # 周三未打卡(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0

查看某一天是否打卡

127.0.0.1:6379> GETBIT sign 3
(integer) 1
127.0.0.1:6379> GETBIT sign 6
(integer) 0

统计打卡的天数

127.0.0.1:6379> BITCOUNT sign
(integer) 4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值