美文网首页
Redis 学习总结(1) 基础知识

Redis 学习总结(1) 基础知识

作者: 张云飞Vir | 来源:发表于2021-07-17 23:29 被阅读0次

    1. 背景

    本文简要介绍 Redis 和完成一个示例。

    2.知识

    Redis(Remote Dictionary Server ),即远程字典服务。它是一个key-value存储系统。它是内存数据存储,因此很快,常常作为缓存使用。

    特点:

    • key-value存储系统, 支持多种数据结构
    • 数据都是缓存在内存中,周期性存储到磁盘
    • Redis支持主从同步

    Redis 是一个键值对存储:

    • Key 定义了如何标识数据块。
    • Values 表示 key指向的 实际数据。Values 可以是任何类型,可以存储字符串,整数,或序列化对象(比如 JSON, XML )

    指令格式:

    set key value
    

    比如: set kk1 vv1 就代表了 将值 vv1 存放在 kk1 为key 的位置。可以直接 get 取出。

    get kk1 
    

    持久化

    • Redis 基于一定量 key 的变更,来触发对数据库进行快照,保存到硬盘上
    • Redis 支持增量模式

    客户端连接工具:

    • 它自带了一个客户端工具: redis-cli
    • 也可以选择 QuickRedis 工具。

    事务(Transactions)
    Redis 所有的命令都是原子性的,包括那些一次可以执行多项操作的命令也一样。此外,在使用多命令的时候,Redis 支持事务。

    Redis 确实是单线程的,这就是为什么每个命令都是原子性的原因。
    一次只能执行一个命令

    事务的使用
    使用 multi 命令, 作为开始。 使用 exec 执行命令。或者 discard 来放弃取消执行。

    multi
    hincrby groups:1percent balance -9000000000
    hincrby groups:99percent balance 9000000000
    exec
    

    key 的过期时间

    • expire 可以指定一个 key 的过期时间。
    • ttl 命令 可以找出一条数据还能活多久
    127.0.0.1:6379> set page 30
    OK
    
    127.0.0.1:6379> expire page 10
    1
    
    127.0.0.1:6379> ttl page
    23
    

    setex 名字,写入一个值的同时指定过期时间,示例:

    127.0.0.1:6379> setex ppp 10 'hello'
    OK
    127.0.0.1:6379> ttl ppp
    4
    

    3. 安装

    请参考:https://www.jianshu.com/p/52350a764bd3
    本文略。

    4. 使用命令行操作 redis 的示例

    4.1 使用 redis-cli

    编译后的 redis-cli 在你的 redis-6.2.4/src 文件夹下,使用它连接Redis服务。

    4.2 使用密码连接到指定redis

    ./redis-cli -h 127.0.0.1 -a 123456 --raw
    

    -h 后是服务器地址
    -a 是密码
    --raw 用来显示中文

    4.3 选择一个“库”

    在 Redis 中,通过一个数字来标识数据库,默认开始标识是 0。

    127.0.0.1:6379> select 1
    OK
    

    4.4 使用"命令字"

    示例:

    127.0.0.1:6379[1]> set k1 v1
    OK
    127.0.0.1:6379[1]> get k1
    "v1"
    

    写一个 json 格式的:

    127.0.0.1:6379[1]> set users:zhang3 '{"name":"zhang3" "age":16 }'
    OK
    

    像上面的 users:zhang3 ,用冒号分割是一种约定习惯,前面表达一个分类,这里表达了“一个叫zhang3的用户”。这是可选的行为。

    5. Redis 的五种数据结构

    五种数据结构:

    • (1) Strings (字符串结构)
    • (2) Hashes (哈希结构)
    • (3) Lists (列表结构)
    • (4) Sets (集合结构)
    • (5) Sorted Sets (有序集合结构)

    5.1 字符串类型 ( Strings )

    指令字有:

    • set 写入
    • get 取出
    • strlen 获得长度
    • getrange 获得范围区间
    • append 在尾部追加

    示例:

    127.0.0.1:6379> set txt1 '白日依山尽,黄河入海流。欲穷千里目,更上一层楼'
    OK
    
    127.0.0.1:6379> get txt1
    白日依山尽,黄河入海流。欲穷千里目,更上一层楼
    
    127.0.0.1:6379> strlen txt1
    69
    
    127.0.0.1:6379> getrange txt1 18 24
    黄河?
    
    append txt1 ' --- 唐诗一首'
    127.0.0.1:6379> get txt1
    白日依山尽,黄河入海流。欲穷千里目,更上一层楼 --- 唐诗一首
    

    value 可以是数字
    如果value 是数字的话,可以做做累加。

    指令字:

    • incr 累加1
    • incrby 增加指定数字
    127.0.0.1:6379> set age 1
    OK
    
    127.0.0.1:6379> get age
    1
    
    127.0.0.1:6379> incr age
    2
    
    127.0.0.1:6379> incrby age 10
    12
    

    5.2 Hashes (哈希结构)

    对至值的内容 可以是一个 Hash 表,类似 Java 里的 HashMap

    格式:

    hset key field value [fileld value]
    

    指令字:

    • hset 写入
    • hget 取出
    • hdel 删除一个字段
    • hkeys 获得所有 key
    • hgetall 后的所有内容

    field 和 value 可以多个键值对。

    示例:

    127.0.0.1:6379> hset zhang3 name zhang3 age 16
    2
    
    # 获取全部
    127.0.0.1:6379> hgetall zhang3
    name
    zhang3
    age
    16
    
    127.0.0.1:6379> hget zhang3 name
    zhang3
    
    127.0.0.1:6379> hkeys zhang3
    name
    age
    
    # 删除字段
    127.0.0.1:6379> hdel zhang3 age
    1
    
    

    5.3 Lists (列表结构)

    它的 value 以数组形式的 存储。不过它更类似一个双向链表。

    指令字有:

    • lpush 从左侧 push
    • rpush 从右侧 push
    • lrange 查看指定范围的元素
    • ltrim 仅保留
    • llen 查看长度

    示例:

    127.0.0.1:6379> lpush duiwu1 zhang3 li4
    2
    
    127.0.0.1:6379> lpush duiwu1 wang5
    3
    
    127.0.0.1:6379> llen duiwu1
    3
    
    127.0.0.1:6379> lrange duiwu1 0 3
    wang5
    li4
    zhang3
    
    

    5.4 Sets (集合结构)

    集合结构被用于存储唯一值。
    集合是无序的。
    它提供了一组基于集合的操作,比如说并集运算。

    集合非常适用于:

    • 需要标记或者跟踪那些有重复属性的值的时候。
    • 或者我们希望使用集合的交并操作的时候。

    指令字:

    • sadd 添加
    • sismember 检索
    • sinter 交集

    示例:

    127.0.0.1:6379> sadd zhang3_friedns li4 wang5
    2
    
    127.0.0.1:6379> sadd wang5_friends li4 zhao6
    2
    
    127.0.0.1:6379> sismember zhang3_friedns li4
    1
    
    127.0.0.1:6379> sinter zhang3_friedns wang5_friends
    li4
    
    

    5.4 Sorted Sets (有序集合结构)

    有序集合结构就像集合结构一样,但是有权重(score)。
    权重提供了排序和排名功能

    指令字:

    • zadd 添加
    • zcount 计算一个区间的数量
    • zrank 排在第几名
    • zrevrank 倒序排名
    127.0.0.1:6379> zadd paiming 80 zhangsan 70 lisi 30 anni
    3
    
    127.0.0.1:6379> zcount paiming 0 60
    1
    
    127.0.0.1:6379> zrevrank paiming anni
    2
    
    127.0.0.1:6379> zrank paiming anni
    0
    

    5.5 其他扩展

    keys : 按模式搜索有哪些key

    127.0.0.1:6379> keys *
    paiming
    age
    zhang3
    duiwu1
    

    6. Java 操作 Redis

    本文太长了,参考我的另一篇文章:https://www.jianshu.com/p/52c72b720062

    7.参考:

    Redis 学习笔记2

    相关文章

      网友评论

          本文标题:Redis 学习总结(1) 基础知识

          本文链接:https://www.haomeiwen.com/subject/bzdwpltx.html