A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大山哥哥 黑马粉丝团   /  2018-8-1 16:42  /  831 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 大山哥哥 于 2018-8-1 16:42 编辑

        Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
        Redis有Windows版的安装包和客户端,同时也有Linux版的安装包和客户端支持。而命令在两个平台下都是一致的,所以今天我们以Windows版的为例进行讲解。
        安装
                Redis的安装及其简单,下载了zip的压缩包之后,直接解压即可,为了防止不必要的麻烦,我们最好选择一个不含中文和空格的目录进行安装。安装完成之后,运行redis根目录下的redis-server.exe,如果出现以下界面,代表运行成功。

                默认情况下,redis的端口号为6379,如果不指定配置文件的话,会使用默认配置文件加载参数。如果想指定配置文件启动,则需要在命令行中输入:redis-server.exe  redis.windows.conf。其中后面的redis.windows.conf为配置文件。
                打开redis-cli.exe,弹出客户端窗口,我们可以使用这个窗口来演示如何使用命令操作redis。
        数据类型
                redis是一个在内存中存储数据的NOSQL数据库,换句话说,redis中存储的数据都是键值对的形式。而键都是字符串,而值的类型有很多。
目前为止Redis支持的值数据类型如下:
                                1) 字符串类型 string
                                2) 哈希类型 hash
                                3) 列表类型 list
                                4) 集合类型 set
                                5) 有序集合类型 sortedset
                下面我们一一演示一下各个数据类型的存取方式。
                        String(字符串)
                                string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
                                string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
                                string类型是Redis最基本的数据类型,一个键最大能存储512MB。
                                存取字符串的语法很简单,存值使用set key value,取值使用get key。例如:
[AppleScript] 纯文本查看 复制代码
redis 127.0.0.1:6379> SET name "itheima"
OK
redis 127.0.0.1:6379> GET name
"itheima"

                        Hash(哈希)
                                Redis hash 是一个键值(key=>value)对集合。
                                Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
                                每个 hash 可以存储 2^32 -1 键值对(40多亿)。
                                存取哈希的命令为hset和hget,例如:
[AppleScript] 纯文本查看 复制代码
redis> HMSET myhash field1 "Hello" field2 "World"
"OK"
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World"

                        List(列表)
                                Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
                                     列表最多可存储 2^32 - 1 元素 (40多亿)。
                                     这里的列表的数据结构更符合我们经常说的队列,因为这个列表可以从表头和表尾部插入数据。语法如下:
                                        添加:
                                                lpush key value: 将元素加入列表左表
                                                rpush key value:将元素加入列表右边
                                        获取:
                                                lrange key start end :范围获取
                                        删除:
                                                lpop key: 删除列表最左边的元素,并将元素返回
                                                rpop key: 删除列表最右边的元素,并将元素返回
[AppleScript] 纯文本查看 复制代码
127.0.0.1:6379> lpush myList a
127.0.0.1:6379> lpush myList b
127.0.0.1:6379> rpush myList c

127.0.0.1:6379> lrange myList 0 -1
"b"
"a"
"c"

                        Set(集合)
                                Redis的Set是string类型的无序集合。
                                集合是通过哈希表实现的
                                使用sadd 命令添加一个 string 元素到 key 对应的 set 集合中,smembers查看集合中所有元素。
[AppleScript] 纯文本查看 复制代码
127.0.0.1:6379> sadd myset a
127.0.0.1:6379> sadd myset b
127.0.0.1:6379> smembers myset
"a"
"b"

                        zset(sorted set:有序集合)
                                Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
                                不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
                                zset的成员是唯一的,但分数(score)却可以重复。

                                使用zadd命令添加元素到集合中。需要设置score和filed。例如:
[AppleScript] 纯文本查看 复制代码
127.0.0.1:6379> zadd mysort 60 zhangsan
127.0.0.1:6379> zadd mysort 50 lisi
127.0.0.1:6379> zadd mysort 80 wangwu
127.0.0.1:6379> zrange mysort 0 -1
"lisi"
"zhangsan"
"wangwu"

                                如果想要把分数也获取出来,使用withscores指令:
[AppleScript] 纯文本查看 复制代码
127.0.0.1:6379> zrange mysort 0 -1 withscores
 "zhangsan"
 "60"
 "wangwu"
 "80"
 "lisi"
 "500"

                                使用sorted set,一般可以做排行榜类的数据存储。例如销量榜、点击榜等。
                Redis 发布订阅
                        Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
                        Redis 客户端可以订阅任意数量的频道,一个频道也可以发送消息到多个客户端。
                        我们下面模拟一个聊天室的案例:
                        首先,创建一个订阅频道itheima_chat。打开一个新的客户端,可以再次用新的客户端再订阅这个频道,代码一致。
[AppleScript] 纯文本查看 复制代码
127.0.0.1:6379> subscribe itheima_chat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "itheima_chat"
3) (integer) 1

                        然后,开启一个新的客户端,在这个频道发布消息,这样,所有的订阅了这个频道的客户端会自动收到信息。

[AppleScript] 纯文本查看 复制代码
127.0.0.1:6379> publish itheima_chat "good good study"
(integer) 2
127.0.0.1:6379> publish itheima_chat "day day up"
(integer) 2
127.0.0.1:6379>

[AppleScript] 纯文本查看 复制代码
1) "message"
2) "itheima_chat"
3) "good good study"
1) "message"
2) "itheima_chat"
3) "day day up"







0 个回复

您需要登录后才可以回帖 登录 | 加入黑马