zoukankan      html  css  js  c++  java
  • redis 数据操作

    redis

    • 定义:

      • redis是开源的,内存数据库,可以用于数据库缓存和消息中间件,支持多种数据类型,字符串,哈希,列表,集合,有序集合等

    本地启动 - 常用命令

    • redis-cli

    • redis-server.exe # 带样式 前提你装了

    • /etc/init.d/redis-server stop ---> 停止

    • /etc/init.d/redis-server start ---> 启动

    • /etc/init.d/redis-server restart ---> 重启

    远程连接redis数据库

    • redis-cli -h <hostname> -p <port>

    数据库切换

    • select 数据库名 注:几号数据库或是新建的数据库名

    通过key查询值

    • 通过所key查询所有值

      • 查询所有键

        • keys *

      • 查询包含a的键

        • keys 'a*'

    查看键对应的value值的类型

    • type key

    值的类型

    • 字符串 string

    • 哈希 hash

    • 列表 list

    • 集合 set

    • 有序集合 zset

    string

    保存设置键值

    • 设置的值不存在就添加,存在则修改

      • set key value

    设置键值及过期时间,单位秒

    • setex key 秒数 value

    设置多个键值

    • mset key1 value1 key2 value2 ...

    追加值

    • append 'key' 'value'

      • 理解为常用append尾部追加

    获取值

    通过单个key获取值

    • get key

    通过多个key获取多个值

    • mget key1 key2...

    判断键是否存在

    • 如果存在返回1,不存在返回0

      • exists key1

    删除

    删除键及对应的值

    • del key1 key2...

      • 可单个,可多个

    设置key的过期时间,单位秒

    • expire 'key' 秒数

    查看有效时间,单位秒

    • ttl key

    hash

    • 用于存储对象,对象的结构为属性、值+

    • 值的类型为string

    保存设置属性

    设置单个属性

    • hset key field value

      • key的属性field为value

      • 个人理解:字典的值是另一个字典

    设置多个属性

    • hmset key field1 value1 field2 value2 ...

    获取

    获取指定键所有的属性

    • hkeys key

    获取指定属性的值

    • hget key field

    获取指定属性的多个值

    • hmget key field1 field2 ...

    获取key的所有属性

    • hvals key

    删除

    • 删除整个hash键及值 , 使用del命令

    • 删除属性,属性对应的值会被一起删除

      • hdel key field1 field2 ...

    list

    • 列表的元素数据类型string

    • 按插入数据顺序排序

    增加

    从左侧插入数据

    • lpush key value1 value2 ...

    从右侧插入数据

    • rpush key value1 value2 ...

    左右侧数据插入理解:
    • 添加完第一个值,在第一个值左侧或右侧向外添加数据元素

    在指定元素的前或后插入新元素

    • linsert key before或after 现有元素 新元素

      • linsert key before 目标元素 新添元素

        • 在目标元素之前添加 新元素

      • linsert key after 目标元素 新添元素

        • 在目标元素之后添加 新元素

    获取

    遍历打印该key的所有值

    • lrange key

      • lrange key 起始下标 结束下标

        • 设置的下标区间 包含该下标 左闭右闭

    设置指定索引位置的元素值

    • lset key index value

      • 例:lset a 1 z

        • 修改key为a的下标为1的元素值为z

    删除

    删除指定元素

    • lren key count value

      • count>0 从头往尾移除

      • count<0 从尾往头移除

      • count=0 移除所有

    set & zset

    set

    • 无序集合

    • 元素为string类型

    • 元素具有唯一性,不重复 去重

    • 对于集合没有修改操作

    增加

    添加元素

    • sadd key member1 member2 ...

    • sadd key 元素1 元素2 ...

    获取集合所有元素

    • smembers key

    删除

    删除指定元素

    • srem key member1 member2 ...

      • 删除指定key的单个或多个元素

    zset

    • sorted set 有序集合

    • 元素为string类型

    • 元素具有唯一性,不重复 去重

    • 每个元素都会关联一个double类型的score,表示权重

    • 注:没有修改操作

    增加

    添加元素

    • zadd key score1 member1 score2 member2 ...

      • score 值为权重(可以理解为排序的正向顺序,数值从小到大)

      • member1 值为元素 string 类型

    获取

    获取指定范围内的元素(下标,左闭右闭)

    • zrange key 起始下标 结尾下标

    获取score值在min和max之间的元素

    • zrangebyscore key min max

      • min 和 max 值取决于score值

    获取元素member的score值

    • zscore key member

      • score 值 可以称为 权值

    删除

    删除指定元素

    • zrem key memeber1 member2 ...

    删除权重值在指定范围内的元素

    • zremrangebyscore key min max

    事务

    • 命令及描述:

    • 1DISCARD  取消事务,放弃执行事务块内的所有命令。

    • 2EXEC  执行所有事务块内的命令。

    • 3MULTI  标记一个事务块的开始。

    • 4UNWATCH  取消 WATCH 命令对所有 key 的监视。

    • 5[WATCH key key ...]  监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

    Redis 事务

    • 可以一次执行多个命令, 并且带有以下两个重要的保证:

    • 批量操作在发送 EXEC 命令前被放入队列缓存。

    • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。

    • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

    一个事务从开始到执行会经历以下三个阶段:

    • 开始事务。

    • 命令入队。

    • 执行事务。

    实例:

    redis 127.0.0.1:6379> MULTI
    OK

    redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
    QUEUED

    redis 127.0.0.1:6379> GET book-name
    QUEUED

    redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
    QUEUED

    redis 127.0.0.1:6379> SMEMBERS tag
    QUEUED

    redis 127.0.0.1:6379> EXEC
    1) OK
    2) "Mastering C++ in 21 days"
    3) (integer) 3
    4) 1) "Mastering Series"
    2) "C++"
    3) "Programming"

  • 相关阅读:
    前后台分离--概念相关
    dubbo概述
    memcache
    分布式系统事务
    2018书单索引
    Lucene原理之概念
    java 通用对象排序
    LightOJ1214 Large Division —— 大数求模
    LightOJ1336 Sigma Function —— 质因子分解、约数和为偶数
    LightOJ1245 Harmonic Number (II) —— 规律
  • 原文地址:https://www.cnblogs.com/canhun/p/11123010.html
Copyright © 2011-2022 走看看