zoukankan      html  css  js  c++  java
  • Redis五大数据类型

    一、16个数据库

    redis默认使用第0个数据库

    1、使用select切换数据库:select 3

    2、查看当前数据库所有的key:keys *

     3、清除当前数据库数据:flushdb

     4、清除全部数据库数据:flushall

    二、五大数据类型

    redis-key

    ①判断键是否存在: exists name

    ②移除键:move name 1

    ③给键设置过期时间:expire name 10

    查看键值类型:type name

    1、String(字符串)

    ①追加:append name 'hello world'

     

     ②获取字符串的长度:strlen name

     ③自增、自减

     ④截取字符串:getrange name 0 2

     

     ⑤替换字符串

     

    ⑥setex(set with expire)设置过期时间

    ⑦setnx(set if not exist) 不存在则创建

     

     ⑧mset:同时设置多个值

    mget:同时获取多个值

    msetnx:不存在则创建,存在则黄建失败

     

     ⑨getset:先get后set

     

    string类型的使用场景(value除了是我们的字符串,还可以是数字):计数器、统计数量

    2、List (列表)

    在redis中,我们可以把list完成栈,队列、阻塞队列

    所有的list命令都是l开头的,redis命令不区分大小写

    ①lpush:往左插入

    rpush:往右插入

    ②lpop:移除列表第一个元素

    rpop:移除列表最后一个元素

     

     ③lidex

     

     ④llen:获取列表的长度

     

    ⑤lrem:移除list中指定个数的value

     ⑥ltrim:截取list

    ⑦rpoplpush

    ⑧lset:更新列表中指定下标的数据

     

     ⑨linsert:将某个具体的value插入到列表中某个元素的前面后者后面

     

    总结:

    实际上是一个链表

    如果key不存在,创建新的链表

    如果key存在,新增内容

    如果移除了所有值,空链表,也代表不存在

    在两边插入或者改动值,效率最高,中间元素相对来说效率会低一些

    3、Set(集合)

    set中的值是不能重复的:无序不重合

    ①添加值、查看值、成员判断、集合元素个数

     

    ②移除

     

    ③随机获取/删除集合中某一个元素

     

     

    ④将一个集合中的元素移动到另一个元素中

    ⑤差集、交集、并集

     

    微博,B站,共同关注(并集)

    微博:A用户将所有关注的人放在一个集合中,将他的粉丝也放在一个集合中(共同关注、共同爱好、推荐好友)

    4、Hash(哈希)

    map集合,key-map集合,本质和Srting类型没有太大的区别,还是一个简单的key-value

    ①添加值/获取值

    ②删除值

     

    ③获取长度:hlen

    ④判断字段存在

     

    ⑤只获取所有字段

    只获取所有value

    应用:变更的数据,user、name、age,尤其是用户用户信息之类的,经常变动的信息。

    hash更适合对象的存储,String更合适字符串的存储

    5、Zset(有序集合)

    ①添加、查看

    ②排序

    ③删除

    ④获取有序集合中的个数

     ⑤获取指定区间的成员数量

    三、事物

    1、基本原理

    redis事物本质:一组命令的集合。一个事物中所有的命令都会被序列化,在事务执行过程中,按照顺序执行

    一次性、顺序性、排他性 执行一些列的命令。

    所以redis事物没有隔离级别的概念

    所有命令在事物中,并没有直接被执行,只有发起执行命令的时候才会执行

    redis单条命令保证原子性的,但是事物不保证原子性

    2、步骤

    redis的事物:开启事物(multi)、命令入队、执行事物(exec)

    3、演示

    正常执行事物:

     取消事物:

    编译型异常(代码有问题,命令有错误),事物中所有的命令都不会被执行

    运行是异常(I/O),如果事物队列中存在语法性,那么执行命令的时候,其他命令是可以正常那个执行的,错误命令抛异常

     

    四、redis实现乐观锁

    1、监控(Watch)(面试常问)

    悲观锁:很悲观,认为什么时候都会出问题,无论做什么都会加锁

    乐观锁:很乐观,认为什么时候都不会出现错误,所以不会加锁。更新数据的时候去判断一下在此期间是否有人修改过这个数据(获取version,更新的时候比较version)

    2、redis的监视测试

    正常执行成功:

    测试多线程修改值,,使用watch可以当做redis的乐观锁操作:

    如果修改失败,先解锁,获取最新的值

     

  • 相关阅读:
    会计科目不能使用
    SAP提示为创建科目作为控制范围中成本要素
    创建成本要素
    拓端tecdat:R语言集成模型:提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据
    拓端tecdat:R语言用贝叶斯线性回归、贝叶斯模型平均 (BMA)来预测工人工资
    拓端tecdat:数据评估三方科技公司开发人员能力
    拓端tecdat:R语言因子实验设计nlme拟合非线性混合模型分析有机农业施氮水平
    拓端tecdat:R语言主成分回归(PCR)、 多元线性回归特征降维分析光谱数据和汽车油耗、性能数据
    Go的异常处理 defer, panic, recover
    Android项目架构设计深入浅出
  • 原文地址:https://www.cnblogs.com/zhangguosheng1121/p/14891662.html
Copyright © 2011-2022 走看看