四、五大数据类型

Redis 键(key)

Redis 键命令用于管理 redis 的键。

基本命令:

/**
    1、有时候会有中文乱码。要在 redis-cli 后面加上 --raw
    2、flushdb清除当前数据库信息,flushall清除所有数据库信息
    3、select 2 表示选择第二个数据库,默认一共16个数据库
    4、keys * 查看本数据库所有信息
*/

对redis中的key 操作

在这里插入图片描述

​ 从上图可以看到我们存入一个字符串和map值,但是我们查看key时,我们只能看到key的名字,不能看到值,那么redis默认把key为string,我们可以对其key经行设置

删除key

del key

更改key

rename key newkey

设置过期时间

expire name  10 //设置name这个key10秒后消失
ttl name //查看这个值还有多久才能消失
persist name //取消倒计时

判断key

exists jiang //判断jiang这个key是否存在,不存在返回0

获得key的类型

127.0.0.1:6379[2]> type user
hash

查看redis中,选择数据库的中所有key

127.0.0.1:6379[2]> scan 0
1) "0"
2) 1) "user"
   2) "age"
   3) "name"
   4) "sex"
   5) "add"

String

基本使用
  • 添加
127.0.0.1:6379> set name taxing//一次添加单个数据
127.0.0.1:6379> mset age 23 add china //一次添加多个参数
127.0.0.1:6379> setnx name jiangxing//如果这个name键不存时才添加
127.0.0.1:6379> setex name 60 jiang //添加name并设置过期时间及其数据
  • 查看
127.0.0.1:6379> get name //查看name这个键的值
127.0.0.1:6379> mget name age add//一次性查看多个键的值
127.0.0.1:6379> strlen age //查看这个值的长度
127.0.0.1:6379> getrange name 0 -1 //查看name这个值,从多少索引到多少索引的值0 -1表示全部查看
    例如:
        127.0.0.1:6379> getrange name 0 -1
        taxing
        127.0.0.1:6379> getrange name 0 1
        ta


  • 更改
127.0.0.1:6379> set naem jiang//如果不存在就创建,否则重命名
127.0.0.1:6379> rename name jiangxing//重命名
  • 删除
del name //删除这个键
  • 步长
127.0.0.1:6379> set view 0//设置值为0

127.0.0.1:6379> incr view //每次加1
127.0.0.1:6379> incrby view 20//指定每次加多少

127.0.0.1:6379> decr view//每次减1
127.0.0.1:6379> decrby view 20//指定每次减多少

使用场景

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

Hash

​ redis中的hash类似于java中的hashmap,里面存储了大量的键值对,底层实现和java的hashmap一样,也是使用数组+链表的结构。
但是hash里面的值都只能是字符串型,而且他们的rehash方式是不一样的,redis的hash并不是一次性将全部的数据进行rehash,而是采用渐进式的方式,也就是说会存在两个相同的结构,等到就得数据全部迁移完成,才会将旧的数据结构删除,使用新的代替。**

基本使用
  • 添加

    127.0.0.1:6379> hset user k1 v1 k2 va//设置值
    127.0.0.1:6379> hsetnx user k1 v1 //只有这个值不存在时才存入
    127.0.0.1:6379> hmset user k1 v1 k2 v2//一次多设置几个键值对,
    
  • 查看

    127.0.0.1:6379> hget user k1//获取存储在哈希表中指定字段的值。
    127.0.0.1:6379> hkeys user//获取指定哈希表中的字段
    127.0.0.1:6379> hvals user//获取哈希表中所有值。
    127.0.0.1:6379> hmget user k1 k2//获取所有给定字段的值
    127.0.0.1:6379> hscan user 0//遍历user这个值中的所有数据
    127.0.0.1:6379> hgetall user//获取在哈希表中指定 key 的所有字段和值
    127.0.0.1:6379> hlen user//获取哈希表中字段的数量
    127.0.0.1:6379> hexists user k1//判断user里面的k1字段是否存在
    
  • 更改

    127.0.0.1:6379> hset user k1 kk1//如果不存在就创建,否则为从更改数据
    
  • 删除

    127.0.0.1:6379> del user //删除一个或多个哈希表字段
    
  • 步长

    127.0.0.1:6379> hincrby user view 20//指定user中的view的值增加20
    127.0.0.1:6379> hincrby user view 20//指定user中的view的值减少20
    
使用场景

​ hash变更的数据 user name age,尤其是是用户信息之类的,经常变动的信息! hash 更适合于对象的存储,String更加适合字符串存储!购物车

List

​ redis的链表是一个双向链表,左右两边都可以插入和去除数据,其实redis底层存储的不仅仅是简单的链表结构,而是称之为一个快速列表的结构,在列表元素较少的时候,redis会使用一块连续的内存存储,这个结构是ziplist,成为压缩列表。当数据内容较多的情况下才会改成quicklist,因为普通列表存储一个内容需要再存储两个额外的指针,很浪费空间,所以在数据量大的时候,才将多个压缩列表使用双向列表链接起来,组成快速列表。

基本使用
  • 右边进左边出(先进先出)-队列

添加列表

rpush datas 1 2 3

获取列表长度

llen datas

左边取出数据,列表中不再有取出的数据

rpop datas
1234
lpop datas
123456
  • 右边进右边出(先进后出)-栈

添加列表

rpush datas 1 2 4

右边取出数据,列表中不再有取出的数据

rpop datas
1234
  • 查询元素

#获取指定位置的元素(遍历所有元素,底层采用链表结构)

lindex datas -1[-1代表倒数第一个]

查询指定区间元素,以下取出所有数据

lrange datas 0 -1

截取指定区间的元素

ltrim datas 0 2
123456
  • 删除数据

    删除那个数据 ,可能存在多个相同的值,所以在删除时要指定删除几个

     lrem student 1 jiangxing
    

    替换数据,如果不存在列表我们去更新就会报错 ,如果存在,更新当前下标的值

    lset user 2 jiangxing
    
使用场景

​ 消息队列、排行榜

set(集合)

​ set集合相当于java中的hashset,它内部是无序的,唯一的,它内部相当于一个特殊的字段,字典中所有的value都是一个NULL,当集合中最后一个元素被移除的时候,内存被回收。set可以存储活动中中奖用户的ID,因为有去重功能,可以保证一个用户不会中奖两次

基本使用
  • 添加数据

    sadd records r1 r2
    1
    
  • 获取所有数据

    查看所有数据
    smembers records
    1
    随机抽出一个数据
    srandmember student
    
  • 判断元素是否存在

    sismember records r1
    1
    
  • 获取集合长度

    scard records
    1
    
  • 移除集合

     srem number 4 //指定移除
    
    • 随机移除指定个数
     spop data 1
    
    • 交、并、差
    127.0.0.1:6379> sadd data a b c//data添加数据a、b、c
    3
    127.0.0.1:6379> sadd data1 b c d e f//data添加数据b、c、d、e、f
    5
    127.0.0.1:6379> sinter data data1  //查看交集 共同好友就可以这样实现
    c
    b
    127.0.0.1:6379> sunion data data1//查看并集
    f
    c
    a
    e
    d
    b
    127.0.0.1:6379> sdiff data data1//查看差集
    a
    127.0.0.1:6379> 
    
应用场景

好友、随机推荐、黑白名单

zset(有序列表)

​ zset其实就是sortedset和hashmap的结合体,它具备set的唯一性。又具备map的key,value性质,但是这个value存储的是他的分值,用来排序。他的内部采用一个“跳跃列表的数据结构”。zset可以用来存储粉丝列表,value值是用户ID,score是关注时间,我们可以对粉丝列表按照关注时间进行排序。

基本使用
  • 添加元素

    zadd grades 100 zhangsan 99 lisi
    1
    
  • 获取指定范围内的元素

    #默认按照score升序
    zrange grades 0 -1
    降序排序
    zrevrange grades 0 -1
    1234
    
  • 获取指定元素的score

    zscore grades zhangsan
    1
    
  • 获取元素的排名

    zrank grades lisi
    1
    
  • 获取两个分数区间的数据

    zrangebyscore grades -inf(负无穷大) inf(正无穷大) widthscores
    1
    
  • 删除指定元素

    zrem grades zhangsan
    1
    

应用场景

​ set 排序 存储班级成绩表,工资表排序!普通消息,1, 重要消息 2,带权重进行判断!排行榜应用实现,取Top N 测试!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值