Redis的安装与常用命令

一、Redis的安装

1、下载与解压

 wget http://download.redis.io/releases/redis-5.0.3.tar.gz

 tar xzf redis-5.0.3.tar.gz 

2、编译与安装

# 进入到解压目录
cd redis-5.0.3 # 进入到解压好的redis-5.0.3目录下,进行编译与安装 make
# 1. 修改 redis.conf 里的 daemonize 为 yes;(使用 ?daemon 搜索)
# 2. 开启远程连接, 配置修改为 bind 0.0.0.0
vi redis.conf
# 启动并指定配置文件
src
/redis-server redis.conf

3、验证Redis的启动

# 验证启动是否成功 
ps -ef | grep redis 

# 进入redis客户端 
src/redis-cli 

# 退出客户端
quit

 退出redis服务:
(1)pkill redis-server
(2)kill 进程号
(3)src/redis-cli shutdown

二、Redis的五种数据结构

1、字符串 String

1.1 String的常用命令

常用操作

  • SET key value [EX seconds]|[PX milliseconds] [NX]|[XX]                        //存入字符串键值对
  • MSET key value [key value ...]   //批量存储字符串键值对
  • SETNX key value                        //存入一个不存在的字符串键值对
  • GET key                                      //获取一个字符串键值
  • MGET key [key ...]                      //批量获取字符串键值
  • DEL key [key ...]                         //删除一个键
  • EXPIRE key seconds                 //设置一个键的过期时间(秒)

原子加减

  • INCR key                           //将key中储存的数字值加1
  • DECR key                         //将key中储存的数字值减1
  • INCRBY key increment     //将key所储存的值加上increment
  • DECRBY key decrement   //将key所储存的值减去decrement

1.2 应用场景

单值缓存

  SET key value
  GET key

对象缓存
   (1) SET user:1 value(json格式数据)
   (2) 需要存储记录: id=1,name=zhangsan,balance=1888,使用批量存储的方式,如下:

        批量存入:MSET user:1:name zhangsan  user:1:balance 1888
        批量获取:MGET user:1:name user:1:balance

分布式锁

  SETNX 作用:若key不存在,则执行成功返回1;若key存在,则执行失败返回0;
    SETNX product:10001 true //返回1代表获取锁成功
  SETNX product:10001 true //返回0代表获取锁失败
    ... 执行业务操作 ...
  DEL product:10001 //执行完业务释放锁

 

  SET key value [EX seconds] [PX milliseconds] [NX|XX] 

  SET product:10001 true ex 10 nx //防止程序意外终止导致死锁设置超时时间

计数器
    INCR article:readcount:{文章id} 
    GET article:readcount:{文章id}

Web集群session共享
   spring session + redis实现session共享

分布式系统全局序列号
   INCRBY orderId 1000 //redis批量生成序列号并放入到应用的内存中提升性能

2、哈希 hash

 2.1 hash 的常用命令

Hash常用操作
       HSET key field value              //存储一个哈希表key的键值;若key存在,则将 field value 直接插入;
   HSETNX key field value            //存储一个不存在的哈希表key的键值
   HMSET key field value [field value ...] //在一个哈希表key中存储多个键值对
   HGET key field                    //获取哈希表key对应的field键值
   HMGET key field [field ...]       //批量获取哈希表key中多个field键值
   HDEL key field [field ...]        //删除哈希表key中的field键值
   HLEN key                      //返回哈希表key中field的数量
   HGETALL  key                   //返回哈希表key中所有的键值

   HINCRBY key field increment       //为哈希表key中field键的值加上增量increment

2.2 应用场景

 对象缓存

 HMSET user {userId}:name zhangsan {userId}:balance 2000
  HMSET user 1:name zhuge 1:balance 1888
  HMGET user 1:name 1:balance

哈希与字符串比较,哈希更适合存储对象;

 电商购物车

  以用户ID为 key,商品ID为 field,商品数量为 value;

   添加商品:hset cart:1001 10088 1
   增加数量:hincrby cart:1001 10088 1
   商品总数:hlen cart:1001
   删除商品:hdel cart:1001 10088
   获取购物车所有商品:hgetall cart:1001

优点:

   (1) 同类数据归类整合储存,方便数据管理;
   (2) 相比string操作消耗内存与cpu更小;
   (3) 相比string储存更节省空间;

缺点:

   (1) 过期功能不能使用在field上,只能用在key上;
   (2) Redis集群架构下不适合大规模使用;

3、列表 list

3.1 常用命令

LPUSH key value [value ...]    //将一个或多个值value插入到key列表的表头(最左边)
RPUSH key value [value ...]    //将一个或多个值value插入到key列表的表尾(最右边)
LPOP key           //移除并返回key列表的头元素
RPOP key           //移除并返回key列表的尾元素
LRANGE key start stop      //返回列表key中指定区间内的元素,区间以偏移量start和stop指定

BLPOP key [key ...] timeout   //从key列表表头弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待
BRPOP key [key ...] timeout    //从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待

3.2 应用场景

 微博消息和微信公号消息

 假如,小一关注了小李、小明;

(1)小李发了一个微博,消息ID为 1001,小一需要看到这条微博,则将这条微博的消息ID放到小一的消息中:

      LPUSH msg:{小一的ID}  1001

(2)小明发了一个微博,消息ID为 1002,小一需要看到这条微博,则将这条微博的消息ID放到小一的消息中:

      LPUSH msg:{小一的ID}  1002

(3)小一要查看最新微博消息的前5条消息

  LANGE msg:{小一的ID} 0 5 

4、集合 set

4.1 常用命令 

SADD key member [member ...]   //往集合key中存入元素,元素存在则忽略;
SREM key member [member ...]    //从集合key中删除元素
SMEMBERS key              //获取集合key中所有元素
SCARD key           //获取集合key的元素个数
SISMEMBER key member      //判断member元素是否存在于集合key中
SRANDMEMBER key [count]      //从集合key中选出count个元素,元素不从key中删除
SPOP key [count]          //从集合key中选出count个元素,元素从key中删除

 

SINTER key [key ...]           //交集运算
SINTERSTORE destination key [key ..]    //将交集结果存入新集合destination中
SUNION key [key ..]            //并集运算
SUNIONSTORE destination key [key ...]   //将并集结果存入新集合destination中
SDIFF key [key ...]           //差集运算
SDIFFSTORE destination key [key ...]     //将差集结果存入新集合destination中

4.2 应用场景

微信小程序的抽奖

点击参与抽奖加入集合:SADD key {userlD}
查看参与抽奖所有用户:SMEMBERS key
抽取count名中奖者:SRANDMEMBER key [count] / SPOP key [count]

微信朋友圈点赞,收藏,标签

集合操作实现微博关注模型

假如关注的关系如下:

xiaoyi 关注的人: xiaoyiSet -- {huahua, mingming,  liangliang}

huahua 关注的人: huahuaSet -- {xiaoyi, mingming,  liangliang,  bobo}

mingming 关注的人:mingmingSet -- {xiaoyi, huahua, liangliang, bobo, yuer}

xiaoyi(我) 进入到 huahua 的主页:

(1)共同关注的人:

sinter xiaoyiSet huahuaSet   -->  {mingming, liangliang}

(2)我关注的人也关注他(huahua):

mingming关注的人是否关注huahua: sismember mingmingSet huahua   

liangliang关注的人是否关注huahuat:sismember liangliangSet huahua

(3)我可能认识的人:(花花关注的人我没有关注)

sdiff huahuaSet xiaoyiSet   --->  {xiaoyi, bobo}

5、有序集合 zset

5.1 常用命令 

ZADD key score member [[score member]…]     //往有序集合key中加入带分值元素
ZREM key member [member …]          //从有序集合key中删除元素
ZSCORE key member              //返回有序集合key中元素member的分值
ZINCRBY key increment member         //为有序集合key中元素member的分值加上increment
ZCARD key                    //返回有序集合key中元素个数
ZRANGE key start stop [WITHSCORES]      //正序获取有序集合key从start下标到stop下标的元素
ZREVRANGE key start stop [WITHSCORES]       //倒序获取有序集合key从start下标到stop下标的元素


ZUNIONSTORE destkey numkeys key [key ...]    //并集计算
ZINTERSTORE destkey numkeys key [key …]     //交集计算

 

 

posted @ 2020-07-22 22:34  风止雨歇  阅读(495)  评论(0编辑  收藏  举报