Redis学习

    xiaoxiao2022-07-07  203

    文章目录

    Redis学习一、 Redis简介二、数据类型(命令)1. Redis 字符串 (String)2. Redis 集合(Set)3.Redis 有序集合(sorted set)4. Redis 哈希(Hash)5.Redis 列表(List)6.Redis 键(key

    Redis学习

    一、 Redis简介

    Redis是一个完全开源免费,遵守BSD协议,是一个高性能的内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理,也可基于内存亦可持久化的日志型。它支持字符串(String)、哈希表(Hash)、列表(List) 、集合(Set) 、有序集合(sorted sets)等数据类型。

    Redis与其它的key-value存储有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

    Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

    二、数据类型(命令)

    1. Redis 字符串 (String)

    命令描述SET key value设置指定key的值GET key获取指定key的值GETRANGE key start end返回 key 中字符串值的子字符GETSET key value将给定 key 的值设为 value ,并返回 key 的旧值(old value)MGET key1 [key2…]获取所有(一个或多个)给定 key 的值STRLEN key返回 key 所储存的字符串值的长度SETEX key seconds value将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)MSET key value [key value …]同时设置一个或多个 key-value 对KEYS *查看redis中的所有数据 > 测试代码: > > 127.0.0.1:6379> keys * // (empty list or set) > 127.0.0.1:6379> set logName zhangsan //OK > 127.0.0.1:6379> set logPwd 123 //OK > 127.0.0.1:6379> set logStatus 0 //OK > 127.0.0.1:6379> keys * > 1) "logPwd" > 2) "logStatus" > 3) "logName" > > 127.0.0.1:6379> get logName //"zhangsan" > 127.0.0.1:6379> getrange logName 0 -1 //"zhangsan" > 127.0.0.1:6379> getrange logName 0 -4 //"zhang" > 127.0.0.1:6379> getset logName lisi //"zhangsan" > 127.0.0.1:6379> get logName //"lisi" > 127.0.0.1:6379> mget logName logPwd logStatus > 1) "lisi" > 2) "123" > 3) "0" > > 127.0.0.1:6379> strlen logName //(integer) 4 > 127.0.0.1:6379> setex token 3 info //OK > 127.0.0.1:6379> get token //"info" > 127.0.0.1:6379> get token //(nil) > 127.0.0.1:6379> get logStatus //"0" > 127.0.0.1:6379> incr logStatus //(integer) 1 > 127.0.0.1:6379> decr logStatus //(integer) -1

    2. Redis 集合(Set)

    Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。 命令描述SADD key member1 [member2]向集合添加一个或多个成员SCARD key获取集合的成员数SDIFF key1 [key2]返回给定所有集合的差集SINTER key1 [key2]返回给定所有集合的交集SISMEMBER key member判断 member 元素是否是集合 key 的成员SMEMBERS key返回给定所有集合的交集返回集合中的所有成员SMOVE source destination member将 member 元素从 source 集合移动到 destination 集合SREM key member1 [member2]移除集合中一个或多个成员SUNION key1 [key2]返回所有给定集合的并集SSCAN key cursor [MATCH pattern] [COUNT count]迭代集合中的元素SPOP key移除并返回集合中的一个随机元素 --(随机删除并返回删除的值) > 测试代码: > > 127.0.0.1:6379> sadd users tianqi //添加一个元素 (integer) 1 > 127.0.0.1:6379> sadd users zhangsan lisi wangwu zhaoliu //添加多个元素 (integer) 4 > 127.0.0.1:6379> smembers users //查看指定key的所有元素 > 1) "wangwu" > 2) "zhaoliu" > 3) "lisi" > 4) "zhangsan" > 5) "tianqi" > > 127.0.0.1:6379> scard users //获取集合的成员数 (integer) 5 > 127.0.0.1:6379> sadd other tom tim kim sam zhangsan lisi wangwu //(integer) 7 > 127.0.0.1:6379> sdiff users other //返回给定所有集合的差集 > 1) "tianqi" > 2) "zhaoliu" > > 127.0.0.1:6379> sinter users other //返回给定所有集合的交集 > 1) "wangwu" > 2) "lisi" > 3) "zhangsan" > > 127.0.0.1:6379> sismember users zhangsan //判断给定元素是否在集合中 (integer) 1 > 127.0.0.1:6379> sismember users zhangsan2 //(integer) 0 > 127.0.0.1:6379> srem users tianqi //删除指定元素 (integer) 1 > 127.0.0.1:6379> smembers users //查看指定key的所有元素 > 1) "wangwu" > 2) "zhaoliu" > 3) "zhangsan" > 4) "lisi" > 127.0.0.1:6379> sunion users other //返回所有给定集合的并集 > 1) "wangwu" > 2) "tim" > 3) "tom" > 4) "zhaoliu" > 5) "sam" > 6) "zhangsan" > 7) "lisi" > 8) "kim" > 127.0.0.1:6379> sscan other 0 match t* //迭代集合中的元素 > 1) "0" > 2) 1) "tom" > 2) "tim" > > 127.0.0.1:6379> spop other //"zhangsan" > 127.0.0.1:6379> smembers other > 1) "kim" > 2) "tom" > 3) "tim"

    3.Redis 有序集合(sorted set)

    Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。 有序集合的成员是唯一的,但分数(score)却可以重复。 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

    命令描述ZADD key score1 member1 [score2 member2]向有序集合添加一个或多个成员或更新已存在成员的分数ZCARD key获取有序集合的成员数ZCOUNT key min max计算在有序集合中指定区间分数的成员数ZRANGE key start stop [WITHSCORES]通过索引区间返回有序集合成指定区间内的成员ZRANK key member返回有序集合中指定成员的索引ZREM key member [member …]移除有序集合中的一个或多个成员ZREVRANGE key start stop [WITHSCORES]返回有序集中指定区间内的成员,通过索引,分数从高到底ZSCORE key member返回有序集中,成员的分数值ZREVRANK key member返回有序集合中指定成员的排名,分数值从大到小排序 > 测试代码: > > 127.0.0.1:6379> zadd myset 4 sayhi 5 sayhello 6 saybye //(integer) 3 > 127.0.0.1:6379> zcard myset //(integer) 5 获取有序集合的成员数 > 127.0.0.1:6379> zcount myset 2 3 //(integer) 2 指定区间分数的成员数 > 127.0.0.1:6379> zrange myset 2 3 // 通过索引区间返回有序集合成指定区间内的成员 > 1) "sayhi" > 2) "sayhello" > 127.0.0.1:6379> zrange myset 2 3 withscores > 1) "sayhi" > 2) "4" > 3) "sayhello" > 4) "5" > > 127.0.0.1:6379> zrank myset hi //(integer) 0 返回有序集合中指定成员的索引 > 127.0.0.1:6379> zrem myset sayhi sayhello //(integer) 2 移除有序集合中的一个或多个成员 > 127.0.0.1:6379> zrevrange myset 1 5 //返回有序集中指定区间内的成员,通过索引,分数从高到底 > 1) "hello" > 2) "hi" > 127.0.0.1:6379> zrevrange myset 1 5 withscores > 1) "hello" > 2) "3" > > 127.0.0.1:6379> zscore myset hello //"3" 返回有序集中,成员的分数值 > 127.0.0.1:6379> zrevrank myset hello //(integer) 1 返回有序集合中指定成员的排名,分数值从大到小排序

    4. Redis 哈希(Hash)

    Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。 Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)

    命令描述HSET key field value将哈希表 key 中的字段 field 的值设为 valueHMSET key field1 value1 [field2 value2 ]同时将多个 field-value (域-值)对设置到哈希表 key 中HDEL key field2 [field2]删除一个或多个哈希表字段HEXISTS key field查看哈希表 key 中,指定的字段是否存在HGET key field获取存储在哈希表中指定字段的值HGETALL key获取在哈希表中指定 key 的所有字段和值HKEYS key获取所有哈希表中的字段HLEN key获取哈希表中字段的数量HMGET key field1 [field2]获取所有给定字段的值HSETNX key field value只有在字段 field 不存在时,设置哈希表字段的值HVALS key获取哈希表中所有值HSCAN key cursor [MATCH pattern] [COUNT count]迭代哈希表中的键值对 > 测试代码: > > 127.0.0.1:6379> hset sets zhangsan 123 //添加一个键值对(integer) 1 > 127.0.0.1:6379> hmset sets wangwu 123 lisi 123 zhaoliu 123 //添加多个键值对 OK > 127.0.0.1:6379> hget sets wangwu //获取指定key的值 "123" > 127.0.0.1:6379> hgetall sets //获取所有键值对 > 1) "zhangsan" > 2) "123" > 3) "wangwu" > 4) "123" > 5) "lisi" > 6) "123" > 7) "zhaoliu" > 8) "123" > > 127.0.0.1:6379> hkeys sets //获取所有key > 1) "zhangsan" > 2) "wangwu" > 3) "lisi" > 4) "zhaoliu" > > 127.0.0.1:6379> hvals sets //获取所有值 > 1) "123" > 2) "123" > 3) "123" > 4) "123" > > 127.0.0.1:6379> hlen sets //获取key中键值对个数 (integer) 4 > 127.0.0.1:6379> hdel sets lisi //删除指定的key (integer) 1 > 127.0.0.1:6379> hmget sets zhangsan wangwu //获取指定多个key的所有val值 > 1) "123" > 2) "123" > > 127.0.0.1:6379> hsetnx sets lisi 123 //如果字段不存在的时候,添加键值对 (integer) 1 > 127.0.0.1:6379> hsetnx sets lisi lisi //(integer) 0 > 127.0.0.1:6379> hscan sets 0 match *s* //迭代哈希表中的键值对 > 1) "0" > 2) 1) "zhangsan" > 2) "123" > 3) "lisi" > 4) "123"

    5.Redis 列表(List)

    Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边) 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

    6.Redis 键(key

    Redis 键命令用于管理 redis 的键。

    最新回复(0)