Redis数据类型

一、String

1. 基本操作

  • k-v 都是String
  • 添加值时,如果不带过期参数,默认永不过期
  • 数据类型都是针对value而言,key永远是string
# 1. 添加/获取/删除 key
SET key value ;    
GET key;    
DEL key;    

# key存在,在value后加一个value,返回字符串长度
# key不存在,新建一个key并给value值
APPEND key value; 
# 获取字符串长度, 若key不存在,返回0
STRLEN key

# 2. 字符串截取, 0 ~ -1 代表截取全部
GETRANGE key start end
# 字符串替换, 从第几位开始,将后面的数据替换为value, 
# 例子: set name abcdefg,   setrange name 1 xx;    axxdefg
SETRANGE key offset value

# 3. 进阶操作
#    4.1 两次set同一个key, 都返回OK, 覆盖操作,默认永不过期
#    4.2 setex:  (set + expire)带过期时间的操作,返回值ok
#    4.3 setnx:  (set if not exist) 如果不存在,则放进去, 返回值1或0
SETEX key seconds value   # seconds为0的时候,表示永不过期
SETNX key value

# 4. 批量操作, 效率更高
#    5.1 mset [k-v]: 批量无条件添加
#    5.2 msetnx [k-v]: 批量不存在再添加, 返回值为1或者0
#                      具有事务属性,一个k-v失败,当前操作回滚
         
MSET k1 v1 k2 v2 k2 k3 v3
MSETNX k1 v1 k2 v2 k3 v3

MGET k1 k2 k3

# 5.  getset: 获取原来的值并返回,同时修改这个值
#     6.1 原k不存在时,返回nil
#     6.2 原k存在时,返回原来的值
GETSET key value

2. 自增/自减

  • redis操作是原子性,采用单线程处理所有业务,命令是依次执行的,无需考虑并发影响
  • 用自增/自减作为唯一id的生成
# 1. integer值运算
#   1.1 必须用在整数上,否则 ERR value is not an integer or out of range
#   1.2 返回操作后的key的值
#   1.3 如果不存在key,则新建并初始化为0
#   1.4 自增的值可以为负数
#   1.5 自增存在最大值: java中long的最大值
# 自增自减
INCR key
DECR key
# key增加value
INCRBY key value
DECRBY key value

# 2. 小数形式
INCRBYFLOAT key value

二、 List

  • List双向链表,元素有序重复, 类似 LinkedList
  • 在左边和右边插入效率高,中间插入相对慢
# 1. 增加: 返回当前key所包含的元素的个数
# RPUSH    LPUSH
LPUSH key element
LPUSH key element1 element2

# 2. 移除:返回移除的元素
LPOP key count
RPOP key count

# 3. 获取   第一个L代表list的意思
LRANGE key 0 -1      # 获取所有元素
LINDEX key index       # 获取指定索引元素
LLEN key          
LREM key count value   # 移除指定个数指定值,返回移除的个数,精确匹配
LTRIM key start end    # 将list截断, 作为新的List

# 4. 复杂操作
RPOPLPUSH source dest    # source右弹一个,左压到dest的list; only supported
LSET key index value     # 给指定下标赋值
LINSERT key BEFORE/AFTER pivot value  # 在pivot元素前或后插入一个值

三、Set集合

  • 元素无序不重复

1. 基本使用

# 1. 增加
SADD key elemment             
SADD key element1 element2 element3

# 2. 移除
SREM key element
SREM key element1 element2 element3

# 3.查看
SMEMBERS key              # 查看所有元素
SISMEMBER key element     # 判断set中是否包含某个元素
SCARD key                 # 获取某个集合的长度

SRANDMEMBER key           # 随机获取集合中的一个元素, 可以带个数
SRANDMEMBER key count

SPOP key                  # 随机弹出一个元素,返回弹出来的元素
SPOP key count

SMOVE src dest value     # 将src中value元素剪切到dest中

SINTER key1 key2 key3    # 交集
SDIFF key1 key2 key3     # 差集
SUNION key1 key2 key3    # 并集  

2. 应用

# 1. 随机推荐
- 比如感兴趣的话题: 从话题的set中随机弹出几个,并将该话题推荐给客户
- 如果客户感兴趣,则后续继续推荐

四、Hash

1. 基本使用

  • key为string, value为Map
# 1. 添加获取 以H开头
HSET key field1 value1 field2 value2 field3 value3 # 返回插入的map的k-v数
HGET key field
HGETALL key     # 获取到所有的对应的键值对

# 批量操作,返回值ok,带事务属性, 覆盖field
HMSET key field1 value1 field2 value2  field3 value3
HMGET key field1 field2

# 3. 获取
HLEN key           # key的 k-v对数
HEXISTS key field  # key的指定field是否存在  
HKEYS key          # 指定key的所有key
HVALS key          # 指定key的所有value

# 4. 删除, 根据field删除k-v对
HDEL key field1, field2, field3

# 5. 增加: map的某个属性增加多少 ,返回增加后的数据
#    减少: 设置numbers为负数即可
HINCRBY key field numbers

# 6 . add if not exist: 返回添加的field的个数
HSETNX key field value

2. 应用

# 1. bean对象
可以用来装bean对象,不要滥用

# 2. 购物车
- 用户id作为key
- 商品编号作为field,商品数量作为value
- 多个商品

# 3. 促销活动: 不同商家(三大运行商),推出 30,50, 100的充值卡抢购, 每个卡都是1000最多
- 商家id作为key
- 不同充值卡编号作为field
- 充值卡对应的数量作为value

五、ZSet

  • 有序集合,增加了权重标识
排行榜数据
# 1. 插入
#    1.1 返回插入的element个数, member 重复就覆盖
ZADD key score1 member1 score2 member2
#   返回当前所有的member,socre不显示
ZRANGE key 0 -1
ZREM key member1, member2
ZCARD key    # member的个数
ZCOUNT key min max  # score在这个区间的所有member

# 3.排序
#  3.1 按照分数排序,最小到最大, 只返回membe
ZRANGEBYSCORE key -inf +inf 
#  3.2 显示分数
# 1) "erick"
# 2) "200"
# 3) "steven"
# 4) "400"
# 5) "jack"
# 6) "500"
ZRANGEBYSCORE key -inf +inf WITHSCORES
# 3.3 按照分数从大到小
ZREVRANGE key 0 -1 WITHSCORES

# 4 随机获取
ZRANDMEMBER key count
ZRANDMEMBER key count WITHSCORES

六、Geospatial

  • 存放经纬度,地理位置信息
附近的人
打车
# 1. 添加. (纬度,经度,名称)
GEOADD key longitude1 latitud1 member1 longitude2 latitud2 member2
# 2. 查询经纬度
GEOPOS key member1 member2
# 3. 显示两个地方的直线距离
GEODIST key member1 member km
# 4. 某个坐标半径内的地方
GEORADIUS key longitude1 latitud1 number km 
# 5. 某个元素方圆多少的其他元素
GEORADIUSBYMEMBER key member number km

七、 HyperLogLog

  • 集合中,不重复元素总个数
  • 基数统计
网站访问量,同一个用户访问多次,只能算一个
总数数统计存在一定的误差性,适用于对精确度要求不高的场景
# 1. 传统实现: 可以将用户的id保存在set里面起到去重效果,
#             如果保存数据太多,内存扛不住,
#             而且目的不是保存元素,只是计数

# 2. Redis:   保存 2^64个不同的数据,只需要固定的12kb内存
#             具有0.81%的误差
PFADD key element1 element2 element3  # 返回1为成功
PFCOUNT key                           # 统计不重复元素的总个数

PFCOUNT key1 key2                     # 两个集合合并起来, 统计不重复元素个数 
PFMERGE dest src1 src2 src3           # 将src的合并到dest, src的不变

八、 Bitmap

  • 用0和1表述数据,如果一个数据只有两个状态,则可以用这种数据类型
  • 利用bit的数据格式,通过二进制的方法来保存数据
# 1. 为key在不同的day中设置 0 或者1 ,返回值为0
SETBIT key 2 0     # 在数据的第二位上给0,
SETBIT key 12 1    # 在数据的第12位上给1,前面的全部用0来补

# 2. 获取具体哪天的value
GETBIT key 2

# 3. 统计状态为1的数据
BITCOUNT key [start end] 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值