zoukankan      html  css  js  c++  java
  • Redis学习笔记

    Redis学习笔记

    标签(空格分隔): PHP Redis


    Redis简介

    Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis 与其他 key - value 缓存产品有以下三个特点:

    • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
    • 还提供list,set,zset,hash等多种数据结构的存储。
    • Redis支持数据的备份,即master-slave模式的数据备份。

    Redis的数据类型

    Redis支持五种数据类型:string(字符串)hash(哈希)list(列表)set(集合)zset(sorted set:有序集合)

    string字符串类型

    string是Redis最基本的类型,一个key对应一个value。Redis的string可以存储任何数据,包括对象序列化之后的字符串。一个key最大可以存储512M的string数据。可以类似的理解为josn

    [
        "name": "tingyugetc",
        "age": "20",
    ]
    

    对于string的一般操作方法有如下几种:

    命令 备注
    set 设置键的值
    get 获取键的值
    del 删除键值

    示例:

    127.0.0.1:6379> set name "tingyuge" // 设置值,成功返回OK
    OK
    127.0.0.1:6379> get name            // 获取值,返回值
    "tingyuge"
    127.0.0.1:6379> del name            // 删除键值
    (integer) 1
    127.0.0.1:6379> get name            // 再次尝试获取值,获取不到返回nil
    (nil)
    127.0.0.1:6379> 
    
    list列表类型

    list可以在一个键下面存储多个值,这些值可以是重复的值。

    [
        "user": [
            "tingyuge",
            "china",
            "20"
        ]
    ]
    

    其常用的操作方法:

    命令 备注
    rpush 从列表的右侧添加元素
    lpush 从列表的左侧添加元素
    rpop 从列表的右侧删除一个元素
    lpop 从列表的左侧删除一个元素
    lindex 获取列表在给定位置上的一个元素
    lrange 获取给定范围所有元素

    示例:

    127.0.0.1:6379> rpush list-key item         // 右侧添加,添加成功会返回当前列表的长度
    (integer) 1
    127.0.0.1:6379> rpush list-key item2
    (integer) 2
    127.0.0.1:6379> rpush list-key item
    (integer) 3
    127.0.0.1:6379> lrange list-key 0 -1        // 获取一定范围内的值, 返回范围的值,其中-1代表元素结束的位置。
    1) "item"
    2) "item2"
    3) "item"
    127.0.0.1:6379> lpush list-key item3        // 左侧添加
    (integer) 4
    127.0.0.1:6379> lrange list-key 0 -1
    1) "item3"                                  // 左侧添加的元素在最前面
    2) "item"
    3) "item2"
    4) "item"
    127.0.0.1:6379> 
    
    set集合类型

    set集合list列表类似,只不过在set集合中不能存储重复的元素。

    [
        "user": {
            "tingyugetc",
            "tingyugetc1",
            "tingyugetc2"
        }
    ]
    

    其常用的方法为:

    命令 备注
    sadd 将指定的元素添加到集合
    smembers 返回集合所包含的所有元素,如果数据量大, 谨慎使用
    sismember 检查给定的元素是否在集合中
    srem 如果给定的元素在集合中,则删除它

    示例:

    127.0.0.1:6379> sadd set-key "item"             // 添加成功,返回1
    (integer) 1
    127.0.0.1:6379> sadd set-key "item1"
    (integer) 1
    127.0.0.1:6379> sadd set-key "item2"
    (integer) 1
    127.0.0.1:6379> sadd set-key "item2"            // 元素已经存在,添加失败,返回0
    (integer) 0
    127.0.0.1:6379> smembers set-key                // 查看元素
    1) "item2"
    2) "item1"
    3) "item"
    127.0.0.1:6379> sismember set-key item          // 检查元素是否在集合中,在返回1,不在返回0
    (integer) 1
    127.0.0.1:6379> srem set-key item               // 删除元素,成功返回删除的个数
    (integer) 1
    127.0.0.1:6379> srem set-key item               // 删除不存在的元素返回0,删除失败返回0
    (integer) 0
    127.0.0.1:6379> sismember set-key item          // 元素已经删除
    (integer) 0
    127.0.0.1:6379> smembers set-key
    1) "item2"
    2) "item1"
    127.0.0.1:6379> 
    
    zset有序集合

    zsetset一样都不允许存在重复的元素,不同的是zset的每个元素都会关联一个score,Redis正是通过score对元素进行从小到大的排序。zset的元素是唯一的但是score可以重复。

    [
        "user": {
            1: "tingyugetc",
            2: "tingyugetc2",
            3: "tingyugetc3"
        }
    ]
    

    其常用的操作:

    命令 备注
    zadd 向有序集合添加一个或多个成员,或者更新已存在成员的分数
    zcard 获取有序集合的成员数
    zrange 通过索引区间返回有序集合成指定区间内的成员
    zrem 移除有序集合中的一个或多个成员
    zscore 返回有序集中,成员的分数值
    zrevrank 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

    示例:

    127.0.0.1:6379> zadd zset-key 1 item            // 添加元素
    (integer) 1
    127.0.0.1:6379> zadd zset-key 2 item
    (integer) 0
    127.0.0.1:6379> zadd zset-key 2 item2
    (integer) 1
    127.0.0.1:6379> zadd zset-key 3 item3
    (integer) 1
    127.0.0.1:6379> zcard zset-key                  // 计算成员数
    (integer) 3
    127.0.0.1:6379> zrange zset-key 0 -1            // 获取索引区间内的元素
    1) "item"
    2) "item2"
    3) "item3"
    127.0.0.1:6379> zrange zset-key 0 -1 withscores // 获取元素同时获取元素的score
    1) "item"
    2) "2"
    3) "item2"
    4) "2"
    5) "item3"
    6) "3"
    127.0.0.1:6379> zrem zset-key item              // 删除元素
    (integer) 1
    127.0.0.1:6379> zscore zset-key item2           // 获取元素的score
    "2"
    127.0.0.1:6379> zrevrank zset-key item2         // 获取元素的排名
    (integer) 1
    127.0.0.1:6379> 
    
    Hash哈希

    hash是一个string类型的fieldvalue的映射表,hash特别适合用于存储对象。

    [
        "user": {
            "name": "tingyuge",
            "age": "20"
        }
    ]
    

    常用的操作:

    命令 备注
    hmset 同时将多个 field-value (域-值)对设置到哈希表 key 中。
    hset 将哈希表 key 中的字段 field 的值设为 value 。
    hmget 获取所有给定字段的值
    hget 获取存储在哈希表中指定字段的值。
    hgetall 获取在哈希表中指定 key 的所有字段和值
    hkeys 获取所有哈希表中的字段键值
    hvals 获取哈希表中所有值
    hdel 删除一个或多个哈希表字段

    示例:

    127.0.0.1:6379> hmset hash-key name "tingyuge" age "20"     // 设置hash表
    OK
    127.0.0.1:6379> hgetall hash-key                            // 获取hash的keys与values
    1) "name"
    2) "tingyuge"
    3) "age"
    4) "20"
    127.0.0.1:6379> hget hash-key name                          // 获取name的值
    "tingyuge"
    127.0.0.1:6379> hkeys hash-key
    1) "name"
    2) "age"
    127.0.0.1:6379> hmget hash-key name
    1) "tingyuge"
    127.0.0.1:6379> hset hash-key city "nanjing"                // 设置key的值
    (integer) 1
    127.0.0.1:6379> hgetall hash-key
    1) "name"
    2) "tingyuge"
    3) "age"
    4) "20"
    5) "city"
    6) "nanjing"
    127.0.0.1:6379> hvals hash-key
    1) "tingyuge"
    2) "20"
    3) "nanjing"
    127.0.0.1:6379> 
    
  • 相关阅读:
    你真的懂@ResponseBody和@RequestBody吗?
    Codeforces Beta Round #7 D. Palindrome Degree manacher算法+dp
    hihocoder #1032 : 最长回文子串 Manacher算法
    CSU 1808: 地铁 最短路
    UVALive 6912 Prime Switch 暴力枚举+贪心
    Codeforces Beta Round #9 (Div. 2 Only) D. How many trees? dp
    UVALive 6913 I Want That Cake 博弈+dp
    UVALive
    Codeforces Round #245 (Div. 1) B. Working out dp
    HDU 5834 Magic boy Bi Luo with his excited tree 树形dp
  • 原文地址:https://www.cnblogs.com/tingyugetc/p/5929257.html
Copyright © 2011-2022 走看看