Redis增删改查操作

目录

1.redis的数据结构:

2.命令操作:

1.通用命令:

2.String类型:

3.Hash类型:

4.List类型:

5.集合类型 set:

6.有序集合类型 sortedset:

7.位操作Bitmaps:

8.基数统计HyperLog:

9.经纬度GEO:


1.redis的数据结构:

  • redis存储的是:key,value格式的数据,其中key都是字符串,value常用的有8种不同的数据结构

  • value的数据结构:

    基本数据结构说明
    字符串类型 StringString
    哈希类型 Hashmap格式
    列表类型 Listlinkedlist格式。支持重复元素
    集合类型 Set不允许重复元素
    有序集合类型 SortedSet不允许重复元素,且元素有顺序
    特殊数据结构说明
    Geo存储的地理位置的经纬度
    BitMap本身不是一种数据类型, 实际上它就是字符串,可以实现对位的操作
    HyperLogRedis HyperLogLog 是用来做基数统计的算法

2.命令操作:

1.通用命令:

格式说明
select [数据库号]切换数据库(redis的数据库有16个)
help @[数据类型]查看相关数据类型的命令
help [commend]查询相关命令的用法
keys [条件]查看符合模板的所有key,不建议在生产环境设备上使用
expire [key] [time]给一个key设置有效期,到期时会被自动删除;创建key时没有设置时间key将永久有效,表示为-1;
ttl [key]查看一个KEY的剩余有效期
exists [key]判断key是否存在
set [key] [value]添加或者修改已经存在的一个String类型的键值对
set [key] [value] ex [time]组合命令,添加一个的键值对,并且指定有效期(单位秒)
get [key]获取指定 key 的值
mset [key1] [value1] ...批量添加多个键值对
mget [key1] [key2] .....根据多个key获取多个String类型的value
setnx [key] [value]添加一个String类型的键值对,前提是这个key不存在,否则不执行
setex [key] [time] [value]添加一个String类型的键值对,并且指定有效期(单位秒)
del [key1] [key2].....删除一个指定的key,或删除多个key
flushdb当前数据库中的所有Key
flushall所有数据库中的key
incr [key]让一个整型的key自增1,返回增加1后的值
incrby [key] [增长数]让一个整型的key自增并指定步长,返回增加1个步长后的值
decr [key]将 key 中储存的数字值减一
decr key [增长数]key 所储存的值减去给定的减量值(decrement)
append [key] [value]如果 key 已经存在并且是一个字符串,将指定的value 追加到该 key 原来值 value 的末尾
  • 查看相关数据类型的命令

    help @hash
  • 查询相关命令的用法

    help keys
  • 查看符合模板的所有key,不建议在生产环境设备上使用

    keys *    # 查询所有的键
    keys a*   # 查询以a开头的键
  • 删除一个指定的key,或删除多个key

    del k1 k2 k3
  • 判断key是否存在

    exists name
  • 给一个key设置有效期,有效期到期时该key会被自动删除;如果创建key时没有设置时间key将永久有效,表示为-1;

    expire name 20   # (单位秒)
  • 查看一个KEY的剩余有效期

    ttl name

2.String类型:

  • String类型,也就是字符串类型,时Redis中最简单的存储类型。

  • 其中value是字符串,不过根据字符串的格式不同,又可以分为3类:

    分类说明
    string普通字符串
    int整形类型,可以做自增,自减操作
    float浮点类型,可以做自增,自减操作
  • 不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m.

  • 常见命令:

    # 添加或者修改一个String类型的键值对
    set name itcast
    # 添加或者修改一个String类型的键值对(多key结构)
    set heima:user:1 itcast
    # 批量添加多个String类型的键值对
    mset k1 v1 k2 v2 k3 v3  
    # 根据多个key获取多个String类型的value
    mget k1 k2 k3
    # 让一个整型的key自增1
    incr age
    # 让一个整型的key自增并指定步长
    incrby age 2
    # 添加一个String类型的键值对,前提是这个key不存在;如果不存在不执行
    setnx lock 1

3.Hash类型:

  • Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构

  • String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便

  • Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:

  • 常用命令:

    常用命令说明
    hset [key] [field] [value]添加或者修改hash类型key的field的值
    hget [key] [field]获取一个hash类型key的field的值
    hmset [key1] [field1] [value1] [field2] [value2]...批量添加多个hash类型key的field的值
    hmget [key1] [field1] [field2].....批量获取多个hash类型key的field的值
    hgetall [key]获取一个hash类型的key中的所有的field和value
    hkeys [key]获取一个hash类型的key中的所有的field
    hvals [key]获取一个hash类型的key中的所有的value
    hincrby [key] [field] [time]让一个hash类型key的字段值自增并指定步长,返回增长后的值
    hsetnx [key] [field] [value]添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
    # 添加或者修改hash类型key的field的值
    hset heima:user:1 name zhangsan 
    hset heima:user:1 age 18
    # 获取一个hash类型key的field的值
    hget heima:user:3 age
    # 获取一个hash类型的key中的所有的field和value
    hgetall heima:user:3
    # 获取一个hash类型的key中的所有的field
    hkeys heima:user:3
    # 让一个hash类型key的字段值自增并指定步长,返回增长后的值
    hincrby heima:user:3 age 2

4.List类型:

  • Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。

  • 特征也与LinkedList类似:

    1. 有序 2.元素可以重复 3.插入和删除快 4.查询速度一般

  • 常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

  • 常用命令:

    常见命令说明
    lpush [key] [value2] [value2]....向列表左侧插入一个或多个元素,返回链表长度
    lpop [key]移除并返回列表左侧的第一个元素,没有则返回null
    rpush [key] [value2] [value2]....向列表右侧插入一个或多个元素,返回链表长度
    rpop移除并返回列表右侧的第一个元素
    lrange [key] [start] [end]返回一段角标范围内的所有元素,从零开始[ start end )
    blpop [key] [time]移除并返回列表左侧的第一个元素,只不过在没有元素时等待指定时间(单位秒)
    brpop [key] [time]移除并返回列表右侧的第一个元素,只不过在没有元素时等待指定时间(单位秒)
    # 向列表左侧插入一个或多个元素(顺序为3-2-1)
    lpush users 1 2 3
    # 向列表右侧插入一个或多个元素(顺序为1-2-3)
    rpush users 1 2 3
    # 移除并返回列表左侧的第一个元素
    lpop users 
    # 返回一段角标范围内的所有元素,[ start end )
    lrange users 0 2
    # 移除并返回列表左侧的第一个元素,只不过在没有元素时等待指定时间(单位秒)
    blpop users 10

5.集合类型 set:

  • Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

  • 特点:

    1. 无序 2.元素不可重复 3.查找快 4.支持交集、并集、差集等功能

  • 常见命令:

    常见命令说明
    sadd [key] [value1] [value2]....向set中添加一个或多个元素
    srem [key] [value]移除set中的指定元素
    scard [key]返回set中元素的个数
    sismember [key] [value]判断一个元素是否存在于set中,如果存在返回1
    smembers [key]获取set中的所有元素
    sinter [key1] [key2]求key1与key2的交集,返回相同的元素
    sdiff [key1] [key2]求key1与key2的差集,返回key1中不相同的元素
    sunion [key1] [key2]求key1和key2的并集,返回所有的元素(不重复)
    # 向set中添加一个或多个元素
    sadd users a b c d
    # 移除set中的指定元素
    srem users a
    # 返回set中元素的个数
    scard users
    # 判断一个元素是否存在于set中
    sismember users a
    # 获取set中的所有元素
    smembers users
    # 求key1与key2的交集,返回相同的元素
    sinter users products

6.有序集合类型 sortedset:

  • Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表

  • SortedSet具备下列特性:

    1. 可排序 2.元素不重复 3.查询速度快

  • 因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

  • 注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可

  • 注意:score为相同数据类型

  • 常用命令:

    常用命令说明
    zadd [key] [score1] [value1] [score2] [value2]....添加一个或多个元素到sorted set ,如果已经存在则更新其score值
    zrem [key] [value]删除sorted set中的一个指定元素
    zscore [key] [value]获取sorted set中的指定元素的score值
    zrank [key] [value]获取sorted set 中的指定元素的排名,从零开始
    zcard [key]获取sorted set中的元素个数
    zcount [key] [min] [max]统计score值在给定范围内的所有元素的个数,包括min和max
    zrange [key] [start] [stop]按照score排序后,获取指定排名范围内的元素,包括start和stop
    zincrby [key] [increment] [value]让sorted set中的指定元素自增,步长为指定的increment值
    zrangebyscore [key] [min] [max]按照score排序后,获取指定score范围内的元素,包括min和max
    zdiff,zinter,zunion求差集、交集、并集
    # 添加一个或多个元素到sorted set ,如果已经存在则更新其score值
    zadd stus 85 jack 45 lucy 98 rose 68 wangsan
    # 删除sorted set中的一个指定元素
    zrem stus jack
    # 获取sorted set中的指定元素的score值
    zscore stus jack
    # 获取sorted set 中的指定元素的排名,从零开始
    zrank stus lucy   # 升序
    zrevrank stus jack  # 降序
    # 获取sorted set中的元素个数
    zcard stus
    # 统计score值在给定范围内的所有元素的个数
    zcount stus 45 85
    # 按照score排序后,获取指定排名范围内的元素
    zrange stus 0 1  # 升序
    zrevrange stus 0 1  # 降序 
    # 让sorted set中的指定元素自增,步长为指定的increment值
    zincrby stus 2 jack
    # 按照score排序后,获取指定score范围内的元素
    zrangebyscore stus 45 87

7.位操作Bitmaps:

  • Bitmaps 本身不是一种数据类型, 实际上它就是字符串(key-value) , 但是它可以对字符串的位进行操作

  • Bitmaps 单独提供了一套命令, 所以在 Redis 中使用 Bitmaps 和使用字符串的方法不太相同。 可以把 Bitmaps 想象成一个以位为单位的数组, 数组的每个单元只能存储 0 和 1, 数组的下标在 Bitmaps 中叫做偏移量

  • 实例:存储网站每天访问次数

  • 语法:

    bitmaps命令说明
    setbit [key] [offset] [value]设置Bitmaps中某个偏移量的值(只能是0或1),offset默认从0开始偏移
    getbit [key] [offset]获取Bitmaps中某个偏移量的值
    bitcount [key] [start end]返回字符串被设置为1的个数,例:100001中有2个1
    setbit users:20210101 1 1    -- 1
    setbit users:20210101 6 1    -- 100000
    setbit users:20210101 11 1   -- 10000000000
    getbit users:20210101 6      -- 获取第6位上的1

8.基数统计HyperLog:

  • Redis HyperLogLog 是用来做基数统计的算法

  • 基数:一个集合中,不重复的数

  • HyperLogLog 的优点是:在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的

  • 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比

  • 但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素

  • 语法:

    HyperLog命令说明
    pfadd [key] [value.....]向key集合中加入value,添加成功返回1,否则返回0
    pfcount [key.....]统计所选集合们中不重复的个数(所有集合值加在一起不重复)
    pfmerge [destkey] [sourcekey.....]将sourcekey集合们的值合并到destkey集合
    pfadd program "java"
    pfadd program "java" "C++"
    pfcount program
    pfmerge hll3 hll1 hll2

9.经纬度GEO:

  • Redis 3.2 中增加了对 GEO 类型的支持。GEO,Geographic,地理信息的缩写。该类型,就是元素的 2 维坐标,在地图上就是经纬度。

  • redis 基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度 Hash 等常见操作

  • 语法:

    GEO命令说明
    geoadd [key] [longitude] [latitude] [name]...添加地理位置信息到key集合,longitude经度,latitude维度,name名称
    geopos [key] [name]获取key集合中name的经纬度
    geodist [key] [name1] [name2]获取两个位置之间的之直线距离
    georadius [key] [longitude] [latitude] [num] [unit]获取以给定经纬度为中心,num长度,unit单位的半径内的元素
    geoadd china:city 121.47 31.23 shanghai
    geoadd china:city 121.47 31.23 shanghai china:city 121.47 31.23 shanghai
    geopos china:city shanghai
    geopos china:city shanghai beijing
    geoadd china:city 121.47 31.23 1000 km
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis数据库增删改查操作包括对不同数据结构的操作。其中,字符串(string)数据结构可以使用set命令进行增加和修改操作,可以使用get命令进行获取操作,可以使用del命令进行删除操作。哈希(hash)数据结构可以使用hset命令进行增加和修改操作,可以使用hget命令进行获取操作,可以使用hdel命令进行删除操作。列表(list)数据结构可以使用lpush或rpush命令进行增加操作,可以使用lrange命令进行获取操作,可以使用lset命令进行修改操作,可以使用lrem命令进行删除指定的值操作。集合(set)数据结构可以使用sadd命令进行添加值操作,可以使用smembers命令进行查询值操作,可以使用srem命令进行删除值操作。有序集合(zset)数据结构可以使用zadd命令进行添加值操作,可以使用zrange命令进行获取值操作,可以使用zrem命令进行删除值操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis数据库常用的增删改查操作(一)](https://blog.csdn.net/qq_43535322/article/details/118255933)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis增删改查操作](https://blog.csdn.net/qq_56776641/article/details/129167238)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值