• redis常用命令


    Redis命令

    redis是一种高级的key:value存储系统,其中value支持五种数据类型:

    1.字符串(strings

    2.字符串列表(lists

    3.字符串集合(sets

    4.有序字符串集合(sorted sets

    5.哈希(hashes

    而关于key,有几个点要提醒大家:

    1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;

    2.key也不要太短,太短的话,key的可读性会降低;

    3.在一个项目中,key最好使用统一的命名模式,例如user:10000:passwd

     

    Strings

    Redis存储结构是key:valuevalue strings数据类型。

    命令

    语法set key value

    1 set name zhangsanfeng

    a) Strings类型keyname 添加一个

    2 get name

    a) 获取keyname属性值。

    3 incr age

    a) 数字字符类型自动加1

    b) 数字字符类型自动转换integer类型,然后执行再加上1

    4 decr age

    a) 数字字符类型自1

    b) 数字字符类型自动转换integer类型,然后执行减去1

    5 incrby age 10

    a) 指定键值加速10

    6 decrby age 10

    a) 指定键值减去10

    Hash

    Hash集合类型,适合于用来存储对象。Java集合类型是用来存储对象。

    存储数据结构分析:

    第一种数据结构

     

    存取对象,使用一个key,使用一个key获取一个对象必须使用反序列化

    缺点

    占用IO资源。

    第二种数据结构:

     

    缺点

    用户ID多次使用,数据冗余。资源浪费

    第三种数据结构:

     

    Redis存储结构:key是用户ID value:就是hash类型数据。

    命令

    1 hset user username zhaowuji

    a) userUsername属性设置一个值

    2 hget user username

    a) 获取UserUsername属性

    3 hdel user password …..

    a) 删除User属性

    4 hsetnx user email .baidu.com

    a) 如果useremail属性值已经存在,不覆盖

    b) 如果不存在,设置值。

    5 hmset user password 123 age 11

    a) 同时设置多个值

    6 Hmget user username age password

    Lists

    List集合数据结构:类似数组,数据是顺序存储。

    List集合链表结构:通过指针从头指针查询到尾指针查找元素。

     

    命令

     

    1 lpush mylist a b c d

     

    a) list类型数据结构设置多个值

     

    2 lrange mylist 0 -1

     

    a) 获取mylist集合中所有

     

    b) 0:值链表开始位置

     

    c) -1链表的结束位置

     

    3 lpop mylist

     

    a) 出栈集合mylist:出栈链表头指针元素。

     

    4 lrem mylist 3 a

     

    a) 删除链表mylist中前3个等于a

     

    5 lset mylist 2 s

     

    a) 链表mylist集合中2角标位置设置一个值,覆盖原值。

     

    6 linsert mylist after s b

     

    a) 集合链表mylsits元素后面插入一个b

     

    Set

     

    命令

     

    1 sadd myset a b c

     

    a) set集合myset设置值:a b c

     

    b)  Set集合元素不允许重复

     

    2 smembers myset

     

    a) 获取集合myset中值

     

    3 srem myset a b

     

    a) 删除集合myset中元素

     

    4 smove myset myset1 c

     

    a) 集合myset元素c移动到集合myset1

     

    Sorted set

     

    Set集合:有序集合。

     

     set集合中每一元素都设置一个得分,根据得分排序

     

     Set集合元素不允许重复,得分可以重复。

     

    设置得分语法:ZADD key score member [score] [member]

     

    命令

     

    1 zadd mysset 1 one 2 two 12 three 9 four 10 five

     

    a) 集合mysset集合添加5个元素,每一个元素都设置一个得分。

     

    2 zcount mysset 1 10

     

    a) 获取分数110的元素个数,默认是闭区间。

     

    3 zcount mysset (1 10

     

    a) 获取分数110的元素个数,左边是开区间(不包含1元素)

     

    4 zcount mysset -inf +inf

     

    a) 获取所有元素

     

    b) –inf:最低值

     

    c) +inf:最高

     

    5 zrange mysset 0 -1 withscores

     

    a) 获取集合mysset所有元素

     

    b) 0:头部元素

     

    c) -1表示尾部元素

     

    d) Withscores查询元素时候,把分数查询出来

     

    6 zrangebyscore mysset 1 10 withscores limit 2 2

     

    a) 根据分数大小来获取元素:

     

    b) Limit分页获取值。

     

    多数据库实例

     

    Redis支持16个数据库实例,数据库实例角标从0—15使用redis客户端登录redis服务器,默认登录0数据库。

     

    登录其他数据库实例:

     

    登录语法:select 数据库实例ID角标

     

    登录1号数据库:

     

    127.0.0.1:6379> select 1

     

    OK

     

    127.0.0.1:6379[1]>

     

    需求:把0数据库数据移动1号数据库

     

    命令move user 1 //移动user1号数据库

     

    事务

     

    事务命令:

     

    开启事务:multi

     

    提交事务:exec

     

    回滚事务:discard

     

    监听事务:watch乐观锁

     

    用户A,用户B 同时读取商品数量itemNum=1用户A,用户B都需要购买商品,商品数量需要减去1使用乐观锁解决问题:

     

    事务一致性 

     

    设计:商品数量添加,在添加过程出一个错误,查看程序执行一致性。

     

    127.0.0.1:6379> multi//开启事务

     

    OK

     

    127.0.0.1:6379> incr itemNum

     

    QUEUED

     

    127.0.0.1:6379> incr itemNum

     

    QUEUED

     

    127.0.0.1:6379> incrby itemNum 10

     

    QUEUED

     

    127.0.0.1:6379> lpop itemNum//使用操作list数据结构命令操作String类型,出现错误

     

    QUEUED

     

    127.0.0.1:6379> decr itemNum

     

    QUEUED

     

    127.0.0.1:6379> decrby itemNum 10

     

    QUEUED

     

    127.0.0.1:6379> exec//提交事务

     

    1) (integer) 2

     

    2) (integer) 3

     

    3) (integer) 13

     

    4) (error) WRONGTYPE Operation against a key holding the wrong kind of value

     

    5) (integer) 12

     

    6) (integer) 2

     

     

     

    特点redis事务不遵循ACID大一统理论,即使中间执行出现错误,后面不影响执行。

     

    12.2 事务回滚

     

     

     

    127.0.0.1:6379> mult//开启事务

     

    OK

     

    127.0.0.1:6379> incr itemNum

     

    QUEUED

     

    127.0.0.1:6379> incr itemNum

     

    QUEUED

     

    127.0.0.1:6379> discard//事务回滚

     

    OK

     

    127.0.0.1:6379> get itemNum

     

    "2"

     

    12.3 Watch

     

    Watch监听事务:乐观锁

     

    乐观锁:一旦发现被监听事务变量发生了变化,事务回滚。

     

    127.0.0.1:6379> watch itemNum

     

    OK

     

    127.0.0.1:6379> multi

     

    OK

     

    127.0.0.1:6379> decr itemNum //检测到itemNum发生变化时,此命令不执行

     

    QUEUED

     

    127.0.0.1:6379> exec

     

    (nil)

     

    127.0.0.1:6379> get itemNum

     

    "0"

     

     

     

     Redis持久化

     

    Rdbredis系统默认持久化策略)

     

    Rdb持久化优点

     

    1 持久化文件将只包含一个文件

     

    2 对灾难恢复,主从复制 效率比较高。

     

    3 持久化工作:子进程

     

    Rdb缺点

     

    1 数据安全性不是很好

     

    Rdb数据持久同步策略

     

     缺省情况下,Redis会将数据集的快照dumpdump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开redis.conf文件之后,我们搜索save,可以看到下面的配置信息:
        save 900 1              #900(15分钟)之后,如果至少有1key发生变化,则dump内存快照。
        save 300 10            #300(5分钟)之后,如果至少有10key发生变化,则dump内存快照。
        save 60 10000        #60(1分钟)之后,如果至少有10000key发生变化,则dump内存快照。

    Aof

    Aof持久化优点

    1 根据redis aof同步策略,数据有更高安全性

    Aof缺点

    1 性能比rdb

  • 相关阅读:
    习题8-8 判断回文字符串
    Field笔记
    Object类中的方法
    字符和字节的区别
    Layui搜索设置每次从第一页开始
    Springboot+Jpa+Layui使用Pageable工具进行数据分页
    Map<String, Object>返回类型
    List集合中剔除重复的数据
    Springboot+Mybatis(Mysql 、Oracle) 注解和使用Xml两种方式批量添加数据
    MySql中group_concat函数的使用
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/6796114.html
Copyright © 2020-2023  润新知