1,数据类型

  • String(字符串,整数,浮点数):做简单的键值对缓存
  • List(列表):储存一些列表类型的数据结构
  • Set(无序集合):交集,并集,差集的操作
  • Hash(包含键值对的无序散列表):结构化的数据
  • Zset(有序集合)(Sorted sets):去重同时也可以排序,
1,String

​ String是redis最基本的数据类型,一个key对应一个value。redis的String可以表示任何数据。比如jpg图像或者序列化对象,String的最大储存值未512MB。

常用命令:

get,set,incr,decr,mget

set:往redis里面输入Key-Value,比如:输入Key为name,Value值为:zhangsan

127.0.0.1:6379> set name zhangsan
OK

get:输入key值,可返回value值

127.0.0.1:6379> get name
"zhangsan"

incr:自增1,比如

127.0.0.1:6379> set age 23
OK
127.0.0.1:6379> incr age
(integer) 24
127.0.0.1:6379> get age
"24"

decr:自减

192.168.119.139:0>decr age
"23"
192.168.119.139:0>get age
"23"

mget:一次获取多value值。

192.168.119.139:0>mget name age1)  "zhangsan"2)  "23"

2,List

常用命令

lpush,lpop,rpush,rpop,llen

lpush:从列表List的最左边插入一个元素

lpop:从列表List的左边移出一个元素

rpush:从列表List的右边插入一个元素

rpop:从列表List的右边移出一个元素

llen:打印当前列表List的元素个数

192.168.119.139:0>lpush list1 cat
"1"
192.168.119.139:0>lpush list1 n
"2"
192.168.119.139:0>llen list1
"2"
192.168.119.139:0>lpop list1
"n"
192.168.119.139:0>llen list1
"1"

3,Set

常用命令

sadd,srem,scard,sismember

sadd:往set中添加数据

srem:从set中删除数据

scard:查看set中存在的元素个数

sismember:查看set中是否存在某个数据

192.168.119.139:0>sadd set1 sky
"1"
192.168.119.139:0>sadd set1 a
"1"
192.168.119.139:0>scard set1
"2"
192.168.119.139:0>sismember set a
"0"
192.168.119.139:0>sismember set1 a
"1"
192.168.119.139:0>srem set1 a
"1"

4,Hash

常用命令

hget,hset,hmget

hget:通过key值,从hash里取对应的value

hset:往hash里,添加key-value

hmget:一次性获取多个key的value

192.168.119.139:0>hset hset1 name zhangsan
"1"
192.168.119.139:0>hset hset1 namg lisi
"1"
192.168.119.139:0>hset hset1 age 23
"1"
192.168.119.139:0>hmget hset1 name namg age1)  "zhangsan"2)  "lisi"3)  "23"

5,ZSet

​ 在redis中,set和zset都有元素的集合,都不允许有重复的元素,不同的是,zset的每个元素都会关联一个分数(分数可以重复),redis通过这个分数为集合中的成员进行排序。

常用命令

zadd,zcard,zrange,zrem,zrevrange

zadd:添加数据

192.168.119.139:0>zadd database 5 redis
"1"
192.168.119.139:0>zadd database 3 mysql
"1"
192.168.119.139:0>zadd database 1 mongodb
"1"

zrem:删除元素

192.168.119.139:0>zrem database redis
"1"

**zrem:**还可以删除多个数据

192.168.119.139:0>zrem database mysql mongodb
"2"

当删除了database中的所有数据后database都不存在了

192.168.119.139:0>zadd books 1 java
"1"
192.168.119.139:0>zadd books 3 go
"1"
192.168.119.139:0>zadd books 2 php
"1"
192.168.119.139:0>zadd books 5 mysql
"1"

zcard:查询数据

192.168.119.139:0>zcard books
"4"

zrange:数据排序,根据分数从大到小

withscores表示用分数进行排序,下面命令的0,3表示排序的区间的是第0个到第三个元素

192.168.119.139:0>zrange books 0 3 withscores1)  "java"2)  "1"3)  "php"4)  "2"5)  "go"6)  "3"7)  "mysql"8)  "5"

zrevrange:数据排序,分数从大到小

192.168.119.139:0>zrevrange books 0 3 withscores1)  "mysql"2)  "5"3)  "go"4)  "3"5)  "php"6)  "2"7)  "java"8)  "1"
6,五种数据类型的原理

​ redis内部使用一个redisObject对象来表示所有的key和value,redisObject的信息如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dkJoT9Gd-1648872184366)(C:\Users\SIN2\AppData\Roaming\Typora\typora-user-images\image-20220402093553352.png)]

6.1,redis核心对象

​ **type:**用来表示这个redisObject是属于五种数据类型(String,set,list,hash,zset,)的哪一种,比如说type=String表示value储存的是一个普通的字符串。

encoding:表示type的底层数据结构是用什么实现的,比如Java中的list的是有ArrayList来实现的,

List list = new ArrayList();

List list = new LinkedList();

ptr:指向底层数据结构的指针

vm:打开reids的虚拟内存功能,此字段才回真正的分配内存,该功能是默认关闭的。

6.2,redisObject如何表示String(各个encoding方式解释)

​ 字符串的encoding有三种方式:

  • int
  • raw
  • embstr

int

​ 如果一个字符串String保存的是整数值,如:set age 13,那么这个整数值可以用long类型标识。那么该字符串的redisObject回把13这个整数值保存在ptr属性中,并将encoding设置为int,

raw

​ 如果字符串String保存的是一个字符串值,并且字符串大于39个字节,那么这个字符串对象将使用一个

简单动态字符串(SDS)来保存这个字符串,并将redisObject的encoding设置为raw

embstr

​ 如果字符串String保存的是一个字符串值,并且字符串小于39个字节那么字符串将使用embstr编码的方式来储存这个字符串。

embstr对别raw的优点:

  • embast创建字符串对象(redisObject)的次数只需要一次,而raw是两次(redisObjcet和sds分开分配)
  • embast调用释放内存的函数一次,rew编码的字符串对象要少一次
  • 由于embast编码是内存的连续性的,而raw不是连续的,因此embast存,取是的速度比较快

6.3,redisObject如何标识List

​ 列表对象list的编码方式encoding有两种,ziplist,linkedlist

ziplist(压缩列表)

​ 压缩列表是节省内存而设计的内存结构(是redis创建的),

​ 优点:

  • 节省内存

    缺点:

  • 比其他结构要消耗跟多的时间,所以redis在数据量少的时候使用压缩列表储存。

​ 列表长度少于512,并且所有元素的长度都少于64字节时,使用使用ziplist(压缩列表)储存,相反会使用lindedList使用

ziplist节省内存的原理

​ 普通数据能够支持随机访问的原因时储存的内存时连续的,但是有一个问题,就是数组中每一个元素的大小都是必须相同的,如果大小不一样的化,那么该元素的内存就必须按照数组中最大的元素(假设是五个字节)的内存存放,那么储存少于5ge字节的元素就会存在内存浪费问题。

linkedlist

​ 列表长度少于512,并且所有元素的长度都少于64字节时,使用使用ziplist(压缩列表)储存,相反会使用lindedList使用

6.4,intset

​ 当集合的长度少于512时,并且所有的元素地时整数时,使用intset储存,否则使用hashtable

2,五种数据类型的应用场景

string的应用场景

​ 普通的key-value键值对都可以用string来保存,

​ 1,访问量统计,每次访问博客和文章的,都用intr命令加一

​ 2,做缓存。

list的应用场景

​ 作为队列,list的两端操作比较方便,所以可以用来一些需要获取最新数据的场景。比如新闻类应用的最新新闻。

hash的应用场景

​ 用来储存,修改对象属性,如果说用户(name,age,like),文章(标题,time,作者,内容,),其中用户相当于key,而(name,age,;like)相当于vlaue

set的应用场景

​ 1,好友推荐,根据set的内容交集,大于每个值就可以推荐,

​ 2,利用set的唯一性,统计网站内容所有独立ip

zset的应用场景

​ 排行榜,因为zset时有序的

在程序中Redis的数据类型分别有什么作用

  • String:缓存,限流,计数器,分布式锁,分布式Session
  • Hash:储存用户信息,用户主页访问量,组合查询
  • List:微博关注人时间轴列表,简单队列
  • Set:赞,踩,标签,好友关系
  • Zset:排行榜

Redis的五种数据类型及应用场景相关推荐

  1. 【Redis】五种数据类型及其使用场景

    Redis 数据类型 五种redis的类型与java的数据类型的类比 string --> String hash --> Hashmap list --> LinkList set ...

  2. 【Redis】五种数据类型

    五种数据类型 string类型 list类型 set类型 hash类型 sortset String 添加/修改数据 set key value 获取数据 get key 删除数据 del key 批 ...

  3. Redis五种数据类型及应用场景

    Redis五种数据类型及应用场景 MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样 ...

  4. 【redis-02】redis的五种数据类型和对应的操作方法,补充RedisUtil模板

    [redis-02]redis的五种数据类型和对应的操作方法,补充RedisUtil模板 [一]redis的五种数据类型 [二]String:字符串常用命令 (1)String基本信息 (2)Stri ...

  5. Redis: Redis支持五种数据类型

    ylbtech-Redis: Redis支持五种数据类型 Redis支持五种数据类型:string(字符串) ,hash(哈希),list(列表),set(集合)及zset(sorted set:有序 ...

  6. StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用

    StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用 原文: StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用 Connec ...

  7. redis五种数据类型的使用场景

    string 1.String 常用命令: 除了get.set.incr.decr mget等操作外,Redis还提供了下面一些操作: 获取字符串长度 往字符串append内容 设置和获取字符串的某一 ...

  8. redis五种数据类型的应用场景_Redis五种不同的数据类型

    一.redis集群测试环境搭建 参考文章:https://www.jianshu.com/p/0a2f8f80983a redis-cli -c -h 10.96.87.129 -p 7001注意:- ...

  9. redis五种数据类型及使用场景

    Redis 数据类型 转载自https://blog.csdn.net/zzu_seu/article/details/106323114 五种类型与类比java的模型 string --> S ...

最新文章

  1. 【WPF】拖拽ListBox中的Item
  2. 机器学习-学习资源整理
  3. VC++ 获取系统时间的方法汇总
  4. html5新增的js api,对HTML5新增JS Api的思考
  5. [投资习惯对比]投资大师vs失败投资…
  6. es6 --- Promise.catch
  7. 前端动画 wow.js 效果
  8. 第 20 章 观察者模式
  9. forEach for 循环
  10. ActionScript 3.0 编程
  11. 如何在Java中针对XSD验证XML
  12. 服务器获取用户信息失败是什么原因,花粉俱乐部获取用户信息失败怎么解决?花粉俱乐部登录失败是什么原因?[多图]...
  13. bam文件读取_sam和bam文件处理
  14. 智能功放 ACS 保护
  15. 就这一篇:教你真正有效地解决爆满的C盘!
  16. 信用卡诈骗检测(经过测试)
  17. 家装软件相关算法和技术归纳
  18. flume backoff 退避算法
  19. 操作系统-复习-考题预测及解析-期中考试
  20. 2022-08-15 第一组 顾元皓 学习笔记

热门文章

  1. 会计行业就业前景分析
  2. 06 go启动生命周期M0和G0
  3. 微盟为私域直播“造节”,零售经济的分野
  4. 读取所有的AppSettings的值
  5. 不限专业的计算机证书,不限专业和工作年限就能报考的证书有哪些?
  6. recastnavigation
  7. 企业访问海外服的几种方式
  8. 服务器自动添加了一个账户密码错误,OUTLOOK添加账户通过用户名和密码自动连接提示到邮件服务器的加密连接不可用...
  9. 物联网在物业管理和智慧楼宇中的应用解决方案
  10. excel如何创建数据库_在Excel中创建电影收藏数据库