redis5种数据类型概览

数据类型

key类型

value类型 特点
string string string
Hash string 类似于java的map集合 value的key不能重复
List string string类型的双向链表

list可以当做栈或队

列,有序可重复

Set string

类似于java中的hashset

只不过set集合中放的都是字符串

无序,不可重复
zset string 分数和数据 有序,不可重复

常用key命令

KEYS  * :可以浏览所有存储在内存中的key

EXPIRE key seconds:给指定的key设置过期时间,超过时间该key就会从内存中删除

TTL key:返回指定的key的所剩的生命时间

-1代表不会过期

-2代表key已经不存在

PERSIST key:移除过期时间

Del key 删除key

Rename key newkey 重命名

string类型

string是redis最基本的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如图片或者序列化的对象。String类型是Redis最基本的数据类型,一个键最大能存储512MB

添加数据 set age 18

删除数据 del age

修改数据 set age 20

查看数据 get age

增1 / 减1:incr key(加1,但是必须是数字) ,decr key(减1,但是必须是数字)

注意:key区分大小写,命令不区分大小写

incr / decr使用场景 :

1. 把某件商品数量放 jedis.set("product", ""+100);

2. 秒杀购买这件商品 Long incr = jedis.decr("product"); 减1后,  然后获得产品余量>0代表还没售完;

然后把当前用户购买信息保存到购买成功列表中;


hash类型

Redis hash 是一个键值(key=>value)对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

添加数据 hset person name jack (给key为person的hash中添加一个键值对,键为name值为jack)

hset person age  18     (给key为person的hash中添加一个键值对,键为age值为18)

hset person sex  男   (给key为person的hash中添加一个键值对,键为sex值为男)

上面三个操作可以合并 hmset  person  name  jack  age  18  sex  男

删除数据 hdel person name(删除hash中某一个键值对)

del person              (删除整个hash)

修改数据 hset person age  30 (覆盖原有的值)

查看数据 hget person name(查看hash中某一个键值对)

hgetall person       (查看hash中所有的数据)

hlen person          (查看整个hash的长度)

自学:hincrby,hdecrby,hexsits,hkeys,hvals…

应用场景:1: hash特别适合用于存储对象,效率更高

2:当redis中key多了,为了很好的管理这些key,我们可以使用hash,比如当我们想缓存商品信息,那我们的key-value应该是:商品id为key:商品的json对象为值,但是商品多了key就多了,这时候我们可以将这些key-value放入hash中,再给hash取个大key比如叫product,所以我们存储的方式就如下:

product 001:{"name":"鞋子"}
002:{"name":"袜子"}
003:{"name":"电脑"}

List数据类型

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

1)常用命令:

两端添加 lpush ages 12 13 18

rpush  ages 1 2 3 4

两端弹出 lpop ages(左边弹出,弹出的同时会删除弹出的数据)

rpop ages(右边弹出,弹出的同时会删除弹出的数据)

查看数据 lrange ages 0 -1 (从左到右查看所有的元素)

llen ages             (查看list的长度)

2)阻塞命令: 消息队列使用

blpop ages 100

移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时(100s)(0表示永远阻塞) 或发现可弹出元素为止

brpop ages 100

移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时(100s)或发现可弹出元素为止

消息队列实例

思路: 使用blpop命令永久堵塞, 移出并获取第一个元素

   // 生产者 - 往list数据类型中放入key为product的数据public static void main(String[] args) {Jedis jedis = RedisUtil.getJedis();jedis.lpush("product", "11","12","13","14","15");RedisUtil.returnResource(jedis);}// 消费者 - 使用堵塞命令实时获取product的数据public static void main(String[] args) {while (true) {// 获取一个redis实例Jedis jedis = RedisUtil.getJedis();try {// 永久堵塞, 等待key为product的数据(从list左边开始逐一获取), 返回一条key和value数据List<String> result = jedis.brpop(0, "product");if (result != null && result.size() > 1) {String key = result.get(0); // productString value = result.get(1); // 逐一取出list中的value值System.out.println(key + " : " + value);}} catch (Exception e) {e.printStackTrace();} finally {// 释放redis实例RedisUtil.returnResource(jedis);}}}

3)自学命令:lpushx, rpushx,,lrem

lpishx : 将一个值插入到已存在的列表头部(最左边),列表不存在时操作无效。

rpushx : 将一个值插入到已存在的列表尾部(最右边)。列表不存在时操作无效。

lrem : 移除指定数量的value (可指定从左/右开始移除)。

应用场景:记录网站最近登陆用户

扩展1:模拟队列

模拟队列 先进先出
从左边存从右边取

lpush ages 10 12 16    rpop ages

 从右边存从左边取 rpush ages 18  12 19     lpop ages

扩展2:模拟栈

模拟栈 先进后出
从左边存从左边取

lpush ages 10 20 18    lpop ages

从右边存从右边取 rpush ages 18  20 19    rpop ages

redis阻塞原理:redis在blpop命令处理过程时,首先会去查找key对应的list,如果存在,则pop出数据响应给客户端。否则将对应的key push到blocking_keys数据结构当中,对应的value是被阻塞的client。当下次push命令发出时,服务器检查blocking_keys当中是否存在对应的key,如果存在,则将key添加到ready_keys链表当中,同时将value插入链表当中并响应客户端。


Set数据类型

Redis的Set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

添加数据 sadd  nums 1 2 3  3 4 5

删除数据 srem  nums 1 2

查看数据 smembers nums(查看集合中所有的数据)

scard nums(查看集合长度)

自学:sismember, srandmemeber,sdiff,sinner,sunion

sismember : 判断 一个 元素是否集合 key 的成员。

应用场景   共同关注、共同喜好


zset数据类型

添加数据 zadd pro 188 袜子 99 书包 22 鞋子(注意:分数在前,元素内容在后)

查询数据

zscore pro 鞋子 (查看鞋子分数)

zcard  pro          (查看集合长度)

zrange pro 0 -1 [withscores](查看集合所有内容,加withscores表示显示分数,不加withscores表示不显示分数)

删除数据 zrem pro 鞋子 (删除鞋子)

代码示例

jedis.zadd("product_1", 200, "袜子");
jedis.zadd("product_1", 180, "上衣");
jedis.zadd("product_1", 190, "下衣");Set<String> zrange = jedis.zrange("product_1", 0, -1);
for (String string : zrange) {System.out.println(string);
}
// 上衣
// 下衣
// 袜子

应用场景:销售排行耪

注意 :为了不出现中文乱码 连接redis服务命令带上--raw     如:./redis-cli --raw   解决中文乱码

原创  作者:全村的希望   www.wendaoxueyuan.com

redis 数据类型与使用场景相关推荐

  1. Redis 数据类型及应用场景

    一. redis 特点 所有数据存储在内存中,高速读写 提供丰富多样的数据类型:string. hash. set. sorted set.bitmap.hyperloglog 提供了 AOF 和 R ...

  2. 超强Redis数据类型与应用场景总结!!

    关于Redis 我们先来聊聊Redis的基础知识. 基于键值对的存储系统 :字典形式. 五种数据结构:字符串(String),Hash(字典),列表(List),集合(Set),有序集合(Sorted ...

  3. redis数据类型、应用场景、常用命令

    redis的5种存储类型:string,hash,list,set,sorted set 两种持久化方式:RDB(默认方式,指定时间间隔内,执行指定的次数的写操作):AOF(默认每秒将写操作追加到AO ...

  4. 【Redis】redis数据类型及应用场景

    ✔ String 此类型和 memcache 相似,作为常规的 key-value 缓存应用 应用场景: ○ 例如微博数.粉丝数等. ✔ Hash redis hash是一个 string 类型的 f ...

  5. 2 万字 + 20张图| 细说 Redis 九种数据类型和应用场景

    作者:小林coding 计算机八股文网(操作系统.计算机网络.计算机组成.MySQL.Redis):https://xiaolincoding.com 大家好,我是小林. 我们都知道 Redis 提供 ...

  6. Redis的数据类型以及每种数据类型的使用场景

    人就是很奇怪的动物,很简单的问题往往大家都容易忽略,当我们在使用分布式缓存Redis的时候,一个最简单的问题往往被人忽略,Redis的数据类型以及每种数据类型的使用场景是什么? 是不是觉得这个问题很基 ...

  7. Redis支持的数据类型以及使用场景,持久化,哨兵机制,缓存击穿,缓存穿透

    Redis支持的数据类型以及使用场景,持久化,哨兵机制,缓存击穿,缓存穿透 简单介绍一个redis? redis是内存中的数据结构存储系统,一个key-value类型的非关系型数据库,可持久化的数据库 ...

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

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

  9. Redis数据类型使用场景及有序集合SortedSet底层实现详解

    Redis常用数据类型有字符串String.字典dict.列表List.集合Set.有序集合SortedSet,本文将简单介绍各数据类型及其使用场景,并重点剖析有序集合SortedSet的实现. Li ...

最新文章

  1. Python eval函数用法简介
  2. Java防止Xss注入json_浅谈 React 中的 XSS 攻击
  3. 使用Zookeeper共享锁和排它锁和分布式队列的原理和实现(ZkClient)
  4. 新股上市涨跌幅规则?
  5. abb变频器正反转切换参数_变频器自动节能功能与电动机正反转图解
  6. 888. 公平的糖果棒交换
  7. 采用CPLD或者FPGA显示TFT液晶屏
  8. LIN、K、CAN、CAN-FD、FlexRay、Ethernet 、MOST、VAN常见汽车总线简介
  9. 【BZOJ4453】cys就是要拿英魂! 后缀数组+单调栈+set
  10. 用Changedetection监控网页的变化
  11. horner算法matlab实现,使用Euclid和Horner算法的多项式求值
  12. 203.为用户定义的数据类型绑定默认值案例
  13. java面试题大合集
  14. Android+Blockly大作业(含登录注册系统、碎片式浏览、Blockly设计)
  15. [置顶]生鲜配送管理系统_升鲜宝V2.0 销售订单汇总_采购任务分配功能_操作说明...
  16. wps.wrod.excel基本操作总结
  17. Python 网络编程之网络协议(未完待续)
  18. 【Flink异常】Caused by: java.lang.RuntimeException: Row arity of from does not match serializers
  19. 云时通 X 九毛九 | SRM系统助力连锁餐饮行业高效管理供应链
  20. stc15f2k60f2单片机定时器_STC15F2系列单片机UART1使用定时器1做波特率发生器

热门文章

  1. HTML网页实现flv视频播放
  2. minecraft java版多少钱_Java版版本记录
  3. halcon 畸变图像校正与长度测量
  4. 浅谈什么是MVC设计模式
  5. 如何将psd文件切图并布局html
  6. 2022年第3周(1月10日-1月16日)中国各地区电影票房排行榜:所有地区票房环比均下降,2个疫情高风险地区票房低于10万元(附热榜TOP31详单)
  7. (微服务)分布式事务-最大努力交付 消息最终一致性方案
  8. 一篇文章带你入门音视频
  9. 空气开关和漏电保护器
  10. python爬取豆瓣电影top250_Python爬虫实战(一):爬取豆瓣电影top250排名