Redis学习

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 的值设为 value
HMSET 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CDHong.it

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值