Redis数据类型及其相关操作


String、List、Set、Hash、Zset

Redis-Key是什么?
EXISTS a //判断key a是否存在
move name 1 //将当前数据库中的name放到指定数据库中(1)
EXPIRE name 10 // 设置元素10秒中后过期
ttl name // 查看name剩余的过期时间
type name // 查看当前key的类型

String 类型:

append name uiop // 在name后面加上"uiop"
STRLEN name //获取字符串name的长度
incr value//使value+1
decr value//使value-1
incrby value 10 //使得value加10
dicrby value 10//使得value减10
GETRANGE i 2 4 //获取字符串i的第三个到第五个字符
GETRANGE i 0 -1 //获取字符串i所有的字符.
SETRANGE i 2 zxc //替换指定位置的字符串 把“zxc”放到字符串i后面第2个字符后面并覆盖第3个字符

set i 123456
        get i //123456
        SETRANGE i 2 zxc//6(返回字符串长度)
        get i //12zxc6

setex(set with expire )#设置过期时间
setex names 10 “一二三”//设置names的值为“一二三“并且在10秒后过期
setnx(set if not exist)#不存在时可以设置(在分布式锁中常用)

mset k1 v1 k2 v2 k3 v3 k4 v4//批量进行set操作
mget k1 k2 k3 k4//批量进行get操作

msetnx k1 v1 k2 v2 k3 v3 k4 v4//批量进行msetnx操作 msetnx是原子性操作 要么一起成功要么一起失败

set student:1 {name:zhangsan,age:2}//设置一个user:1 对象 值为json字符来保存一个对象!

getset//先get再set
getset db r//nil
getset db a//r
getset db l//a

Spring类型的使用场景:value除了是字符串还可以是数字
·计数器
·统计多单位数量
·对象缓存存储

List类型

在redis中可以把list当成栈、队列、阻塞队列!是链表不是数组!

list类型所有操作都是L开头!
Lpush list one 将一个值或多个值,插入列表头部(左)
rpush list two 从右边放

lrange list 0 -1 获取list中所有值

lpop/rpop 移除值
lpop list 从左边移除
rpop list 从右边移除

通过下标获取值
lindex
lindex list 2

获取列表长度
llen list

移除指定的值!
lrem list 2 weqweqq(移除list中的2个weqweqq)

修剪
ltrim list 1 2 剩下截取的元素

移除列表的最后一个元素,并移动到新的列表中
rpop lpush list lists “hello” #会把list中的“hello"删除并在lists中创建一个”hello“

替换
lset 将列表中指定下标的值替换为另外一个值,更新操作
lset list 1 other #如果不存在则会报错

插入
Linsert
linsert list before “word” “other” #把other插入到word的前面
insert list after “word” “other” #把other插入到word的后面

1、实际上是一个链表,before Node after,left,right都可以插入值
2、如果key不存在,创建新的链表
3、如果可以存在,新增内容
4、如果移除了所有值,空链表,也代表不存在!
5、在两边插入或者改动值,效率高,中间元素,相对于来说效率会第一点~

Set

集合类型 (Set) 是一个无序并唯一的键值集合。它的存储顺序不会按照插入的先后顺序进行存储。
只能存储非重复元素;

sadd myset ”hello“ 添加
smembers myset 获取myset中的元素
sismember myset hello 判断myset中是否有元素hello
scard myset 获取myser中元素个数
srem myset hello #移除set集合中的指定元素
srandmember myset 随机抽出一个元素
srandmember myset 2 随机抽出指定个数元素
spop myset 随机移除myset的一个元素
smove myset myset2 hello 把myset中的hello移动到myset2中
共同关注(并集)

数字集合类:
差集、交集、并集
(以前一个为参照物)
sdiff key1 key2 获取key1和key2中产生差集的
sinter key1 key2 获取key1和key2中产生交集的
sunion key1 key2 获取key1和key2中产生并集的

Hash

本质和String没有太大的区别,还是简单的key-value
Map集合,key-Map集合
key:(key:value)
hset myhash field1 hello 赋值
hget myhash filed1 获取到myhash中filed1的value
hmset myhash field2 hello1 field3 hello2 批量赋值
hmget…… 批量获取
hgetall myhash 获取myhash中所有的值
hdel myhash field1 删除myhash中的field1(对应的value也就没有了)
hlen myhash 获取hash表的字段数量!
hexists myhash field1 判断hash中指定字段是否存在!
hkeys myhash 查看myhash中所有的key
hvals myhash 查看myhash中所有的vals
HINCRBY myhash field3 1 给myhash里面的field3的value加1
HINCRBY myhash field3 -1相当于 dicrby myhash field3 1
hsetnx myhash field4 hello 如果不存在则可以设置

Zset

有序集合,在set基础上添加了一个值
set:
set k1 v1
zset:
zset k1 score1 v1

zadd ssa 2500 xiaoming #添加三个用户
zadd ssa 5000 xiaohong
zadd ssa 500 xiaolan

zrange ssa -inf +inf 所有用户

zcard ssa 查看用户个数

ZRANGEBYSCORE ssa -inf +inf #显示所有用户 按工资从小到大排序!
ZRANGEBYSCORE ssa -inf 2500 whitscores #显示工资小于2500员工的升序排序!

rem 移除操作:
zrem ssa xiaoming

三种特殊数据类型

Geospatial

可以添加城市地理位置
规则:地球的两极 无法直接添加 一般会下载数据通过Java程序导入

Hyperloglog

Redis Hyperloglog 基数统计的算法
优点:占内存固定,2^64不同的元素技术,只需要占用2KB的内存,
从内存角度考虑的话 Hyperloglog是首选

网页的UV(一个用户多次访问一个网站,还算作一个人访问)
传统方式:set保存用户的id,然后统计set中的元素数量,作为判断的标准,这样会占用大量的空间,我们的目的是为了计数而不是保存id。

PFadd mykey a b c b #创建第一组元素
PFcound mykey #查看元素基数数量
如果允许容错就使用 hyperloglog不允许就用传统方法

Bitmaps

可以用来统计用户活跃、不活跃、打卡等只存在两个状态的都可以使用bitmaps位存储
用bitmap来表示一周签到 0代表未签到、1代表签到

setbit sign 0 0
setbit sign 1 0
setbit sign 2 1
setbit sign 3 1
setbit sign 4 1
setbit sign 5 1
setbit sign 6 0

bitcount sign#用来统计这周的打卡记录,就可以看到是否有全勤

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值