zoukankan      html  css  js  c++  java
  • redis入门:介绍、特点、安装、各类型常用操作

    一、redis介绍##

    Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

    Redis支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) , bitmaps(一串连续的2进制数字), hyperloglogs (一个概率统计的数据结构,可以被用来估计一个集合的基数)和 地理空间(geospatial) 索引半径查询。

    Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

    二、redis特点##

    通过上面的介绍可以看到,Redis有以下特点:

    1、支持丰富的数据结构和命令

    2、支持数据持久化(硬盘上)

    3、支持事务

    4、值最大可到512M

    5、支持集群部署(3.0开始自带)

    三、ubuntu下安装##

    由于 redis 主要用来作服务器上的缓存和消息队列,主要也是针对linux系统开发的,所以这里也只介绍如何在linux系统(本文用的是ubuntu环境)下安装(windows系统上也是可以安装的,可自行google)

    
    # apt-get install redis-server
    

    安装完成后,redis会自动启动,我们可以通过下面的命令查看:

    
    # ps -aux  grep redis
    root      2846  0.0  0.0  11740   936 pts/0    S+   00:59   0:00 grep --color=auto redis
    redis    17170  0.0  0.3  39844  7184 ?        Ssl  Jun12  15:31 /usr/bin/redis-server 127.0.0.1:6379
    

    还可以通过netstat查看6379(redis默认端口)端口监听情况:

    
    # netstat -nlt  grep 6379
    tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN
    

    通过以上命令我们可以看到redis已经正确实装并启用了。

    安装了redis服务端后,会自带安装一个命令行客户端程序 redis-cli,直接输入 redis-cli就可以启动:

    
    # redis-cli
    127.0.0.1:6379> 
    

    以下内容中的代码部分就可以在这里验证。

    四、各类型常用操作##

    1、String类型常用操作

    Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字,常用的命令有:

    • set:新增或修改记录
    • get:查看获取(打印)记录
    • decr:原子递减(此时value为数字)
    • incr:原子递增(此时value为数字)
    • mset:批量写入
    • mget:批量读取

    部分命令演示:

    
    # redis-cli
    //新增记录
    127.0.0.1:6379> set name imooc
    OK
    //读取记录
    127.0.0.1:6379> get name
    "imooc"
    //修改记录
    127.0.0.1:6379> set name imooc2
    OK
    127.0.0.1:6379> get name
    "imooc2"
    //value也可以是数字
    127.0.0.1:6379> set age 20
    OK
    127.0.0.1:6379> get age
    "20"
    //原子递减
    127.0.0.1:6379> decr age
    (integer) 19
    //原子递增
    127.0.0.1:6379> incr age
    (integer) 20
    //批量新增
    127.0.0.1:6379> mset sex man city wuhan 
    OK
    //批量读取
    127.0.0.1:6379> mget sex city
    1) "man"
    2) "wuhan"
    

    2、hash类型常用操作

    Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口,常用的命令有:

    • hset key field value:将哈希表 key 中的字段 field 的值设为 value
    • hget key field:获取存储在哈希表中指定字段的值
    • hdel key field2 [field2]:删除一个或多个哈希表字段
    • hkeys key:获取所有哈希表中的字段
    • hvals key:获取哈希表中所有值
    • hexists key field:查看哈希表 key 中,指定的字段是否存在
    • hgetall key:获取在哈希表中指定 key 的所有字段和值
    • hlen key:获取哈希表中字段的数量
    • hmset key field1 value1 [field2 value2 ]:同时将多个 field-value (域-值)对设置到哈希表 key 中
    • hmget key field1 [field2]:获取所有给定字段的值

    部分命令演示:

    
    //新增HASH
    127.0.0.1:6379> hset user1 name atwal
    (integer) 0
    //获取HASH值
    127.0.0.1:6379> hget user1 name
    "atwal"
    //增加HASH值
    127.0.0.1:6379> hset user1 city wuhan
    (integer) 1
    //批量增加HASH值
    127.0.0.1:6379> hmset user1 work coder language php
    OK
    //获取所有HASH字段和值
    127.0.0.1:6379> hgetall user1
    1) "name"
    2) "atwal"
    3) "city"
    4) "wuhan"
    5) "work"
    6) "coder"
    7) "language"
    8) "php"
    //删除某个字段
    127.0.0.1:6379> hdel user1 language
    (integer) 1
    127.0.0.1:6379> hgetall user1
    1) "name"
    2) "atwal"
    3) "city"
    4) "wuhan"
    5) "work"
    6) "coder"
    

    3、list类型常用操作

    Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,常用命令:

    • lpop key:移出并获取列表的第一个元素
    • lpush key value1 [value2]:将一个或多个值插入到列表头部
    • lpushx key value:将值value插入到列表key的表头,当且仅当key存在并且是一个列表
    • rpop key:移除并获取列表最后一个元素
    • rpush key value1 [value2]:在列表中添加一个或多个值
    • rpushx key value:为已存在的列表添加值
    • lrange key start stop:获取列表指定范围内的元素,lrange key 0 -1 表示输出所有元素
    • lrem key count value:根据参数count的值(count > 0:从表头向表尾搜索,数量为count,count < 0从表尾向表头搜索,数量为count的绝对值,count = 0 移除表中所有与value相等的值),移除列表中与参数value相等的元素
    • lset key index value:通过索引设置列表元素的值
    • lindex key index:通过索引获取列表中的元素
    • llen key:获取列表长度

    部分命令演示:

    
    //加个多个元素到列表msg
    127.0.0.1:6379> lpush msg m i d e h k
    (integer) 6
    //向列表头部添加a元素
    127.0.0.1:6379> lpushx msg a
    (integer) 7
    //输出列表
    127.0.0.1:6379> lrange msg 0 -1
    1) "a"
    2) "k"
    3) "h"
    4) "e"
    5) "d"
    6) "i"
    7) "m"
    //移除列表第一个元素
    127.0.0.1:6379> lpop msg
    "a"
    127.0.0.1:6379> lrange msg 0 -1
    1) "k"
    2) "h"
    3) "e"
    4) "d"
    5) "i"
    6) "m"
    //移除列表最后一个元素
    127.0.0.1:6379> rpop msg
    "m"
    //向列表尾部添加rm元素
    127.0.0.1:6379> rpush msg rm
    (integer) 6
    127.0.0.1:6379> lrange msg 0 -1
    1) "k"
    2) "h"
    3) "e"
    4) "d"
    5) "i"
    6) "rm"
    //删除值为d的元素
    127.0.0.1:6379> lrem msg 0 d
    (integer) 1
    127.0.0.1:6379> lrange msg 0 -1
    1) "k"
    2) "h"
    3) "e"
    4) "i"
    5) "rm"
    //修改第二个元素为hello
    127.0.0.1:6379> lset msg 1 hello
    OK
    127.0.0.1:6379> lrange msg 0 -1
    1) "k"
    2) "hello"
    3) "e"
    4) "i"
    5) "rm"
    //获取第二个位置元素值
    127.0.0.1:6379> lindex msg 1
    "hello"
    //获取列表元素个数
    127.0.0.1:6379> llen msg
    (integer) 5
    

    4、set类型常用操作

    Set是string类型的无序集合。集合成员是唯一的。常用命令:

    • sadd key member1 [member2]:向集合添加一个或多个成员
    • sdiff key1 [key2]:返回给定所有集合的差集
    • sdiffstore destination key1 [key2]:返回给定所有集合的差集并存储在 destination 中
    • sinter key1 [key2]:返回给定所有集合的交集
    • sinterstore destination key1 [key2]:返回给定所有集合的交集并存储在 destination 中
    • sunion key1 [key2]:返回所有给定集合的并集
    • sunionstore destination key1 [key2]:所有给定集合的并集存储在 destination 集合中
    • smove source destination member:将 member 元素从 source 集合移动到 destination 集合
    • spop key:移除并返回集合中的一个随机元素
    • srandmember key [count]:返回集合中一个或多个随机数
    • srem key member1 [member2]:移除集合中一个或多个成员
    • smembers key:返回集合中的所有成员
    • sismember key member:判断 member 元素是否是集合 key 的成员
    • scard key:获取集合的成员数

    部分命令演示:

    
    //添加a b c d到follow集合中
    127.0.0.1:6379> sadd follow a b c d
    (integer) 4
    //添加c d e f到fans集合中
    127.0.0.1:6379> sadd fans c d e f
    (integer) 4
    //计算follow集合与fans集合的差集
    127.0.0.1:6379> sdiff follow fans
    1) "a"
    2) "b"
    //计算follow集合与fans集合的交集
    127.0.0.1:6379> sinter follow fans
    1) "d"
    2) "c"
    //计算follow集合与fans集合的并集
    127.0.0.1:6379> sunion follow fans
    1) "f"
    2) "d"
    3) "b"
    4) "a"
    5) "e"
    6) "c"
    //从follow集合中随机删除一个元素
    127.0.0.1:6379> spop follow
    "a"
    //从follow集合中随机删除一个元素
    127.0.0.1:6379> spop follow
    "b"
    //follow集合的所有元素
    127.0.0.1:6379> smembers follow
    1) "d"
    2) "c"
    //fans集合的所有元素
    127.0.0.1:6379> smembers fans
    1) "e"
    2) "f"
    3) "d"
    4) "c"
    

    5、Sorted Set类型常用操作

    Sorted Set和Set一样也是string类型元素的集合,且不允许重复的成员。不同的是Sorted Set每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。常用命令:

    • zadd key score1 member1 [score2 member2]:向有序集合添加一个或多个成员,或者更新已存在成员的分数
    • zcard key:获取有序集合的成员数
    • zcount key min max:计算在有序集合中指定区间分数的成员数
    • zrange key start stop [withscores]:通过索引区间返回有序集合成指定区间内的成员
    • zremrange key start stop [withscores]:返回有序集中指定区间内的成员,通过索引,分数从高到底
    • zrangebyscore key min max [withscores] [limit]:通过分数返回有序集合指定区间内的成员
    • zremrangebyscore key min max:移除有序集合中给定的分数区间的所有成员
    • zrank key member:返回有序集合中指定成员的索引
    • zrevrank key member:返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
    • zrem key member [member ...]:移除有序集合中的一个或多个成员
    • zremrangebyrank key start stop:移除有序集合中给定的排名区间的所有成员
    • zrevrangebyscore key max min [withscores]:返回有序集中指定分数区间内的成员,分数从高到低排序
    • zscore key member:返回有序集中,成员的分数值

    部分命令演示:

    
    //创建有序列表score
    127.0.0.1:6379> zadd score 90 jim 95 lily
    (integer) 2
    //获取成员数
    127.0.0.1:6379> zcard score
    (integer) 2
    //获取 0 到 100 分之间的元素个数
    127.0.0.1:6379> zcount score 0 100
    (integer) 2
    //获取lily索引
    127.0.0.1:6379> zrank score lily
    (integer) 1
    //获取jim分数
    127.0.0.1:6379> zscore score jim
    "90"
    //获取索引0 1之间的带分数元素
    127.0.0.1:6379> zrange score 0 1 withscores
    1) "jim"
    2) "90"
    3) "lily"
    4) "95"
    

    6、Pub/Sub类型常用操作

    Pub/Sub(发布/订阅)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息,可用于实时消息系统。常用命令:

    • subscribe channel [channel ...]:订阅给定的一个或多个频道的信息。
    • unsubscribe [channel [channel ...]]:指退订给定的频道。
    • publish channel message:将信息发送到指定的频道。
    • pubsub subcommand [argument [argument ...]]:查看订阅与发布系统状态。

    命令演示:

    
    //先在终端1上订阅频道im
    127.0.0.1:6379> subscribe im 
    Reading messages... (press Ctrl-C to quit)
    1) "subscribe"
    2) "im"
    3) (integer) 1
    
    //在终端2上im频道上发布消息
    # redis-cli
    127.0.0.1:6379> publish im hello
    (integer) 1
    127.0.0.1:6379> publish im hi
    (integer) 1
    
    //终端1上显示收到的消息
    1) "message"
    2) "im"
    3) "hello"
    1) "message"
    2) "im"
    3) "hi"
    

    7、Transactions事务

    Transactions可以一次执行多个命令, 并且带有以下两个重要的保证:

    • 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
    • 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

    一个事务从开始到执行会经历以下三个阶段:

    • 开始事务。
    • 命令入队。
    • 执行事务。

    常用命令:

    • multi:标记一个事务块的开始。
    • exec:执行所有事务块内的命令。
    • discard:取消事务,放弃执行事务块内的所有命令。
    • watch key [key ...]:监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
    • unwatch:取消 WATCH 命令对所有 key 的监视。

    命令演示:

    
    //开始一个事务
    127.0.0.1:6379> multi
    OK
    127.0.0.1:6379> set name imooc
    QUEUED
    127.0.0.1:6379> set age 20
    QUEUED
    127.0.0.1:6379> incr age
    QUEUED
    127.0.0.1:6379> incr age
    QUEUED
    127.0.0.1:6379> hmset user1 name atwal city wuhan
    QUEUED
    //执行上面事务块内的所有命令
    127.0.0.1:6379> exec
    1) OK
    2) OK
    3) (integer) 21
    4) (integer) 22
    5) OK
    

    以上只是redis的基本用法,redis还有很多高级用法,如数据的备份恢复,安全,在PHP中使用等等,这些内容留在下次再分享吧:)

    转自:http://www.imooc.com/article/10913

  • 相关阅读:
    使用JS对中文字符串进行utf8的Base64编码
    subprocess理解
    25组新鲜出炉的有用图标集
    jQuery UI 1.8.9 发布
    正则匹配拼音
    jQuery Mobile 教程 (1)
    10款精选的用于构建良好易用性网站的jQuery插件
    Html 5 video/audio 格式转换 ogg
    10个有用的jquery 图片插件
    asp.net MVC 权限设计(续)
  • 原文地址:https://www.cnblogs.com/lurenjiashuo/p/redis-base.html
Copyright © 2011-2022 走看看