Redis

  • 简介
  • 安装
  • 基础使用
  • 配置&说明
  • 数据类型
  • redis命令
  • 订阅和发布
  • redis事务
  • redis脚本
  • Redis 连接

  • Redis服务器

 

参考文章:

  https://blog.csdn.net/u011277123/article/details/78692603/ (redis使用场景)

         http://redisdoc.com/   (redis 文档)

        http://www.redis.net.cn

         http://try.redis.io/

          http://www.redis.net.cn/order/3669.html(命令)

简介

REmote DIctionary Server(Redis 远程字典服务) 是一个key-value存储系统。支持网络、遵守BSD协议,可基于内存亦可持久化的日志型、Key-Value数据库。

BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,实现代码共享。

value支持的数据类型:

  • String: 字符串
  • Hash: 散列
  • List: 列表
  • Set: 集合
  • Sorted Set: 有序集合

Redis的特性:

  1. 读写速度非常的快,读的速度是110000次/s,写的速度是81000次/s。

        2.可存储在缓存区也可读写到磁盘中。

        3. 具有数据库的一致性(原子)特性。

        4. redis比较小仅5MB。

Redis的使用场景:

   1. 短时间高并发IO操作。

           2. 海量级数据的操作。

           3.  数据结构复杂不适合用关系型数据库存储。

  大多用于:

    分布式架构的Session共享

               配合关系型数据库做高速缓存

安装

下载地址:

    https://github.com/MSOpenTech/redis/releases(windows下安装)

              http://bitsandpieces.it/redis-x86-32bit-builds-for-windows  (windows x86下载)

               http://www.redis.cn/   (中国区官网)

              http://redis.io/download (linux下安装)

下载后解压即可。为方便使用最好绑定到环境变量中。

http://www.runoob.com/redis/redis-install.html (查找linux下使用)

linux下:

      >tar -zxf    ****

     >make  && make install

如果出现安装失败缺少gcc则安装gcc,然后再安装应用

》yum install -y gcc texinfo-tex flex zip libgcc.i386 glibc-devel.i386

 如果出现   zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory

参见:https://blog.csdn.net/bugall/article/details/45914867

   》make MALLOC=libc

 

     >cd src

     >./redis-server  ../redis.conf

为了快速启用和使用redis可将其设置到bin中:

     >cp redis-server redis-cli /usr/bin/

     >cp ../redis.conf /etc/

     >redis-server /etc/redis.conf

     >redis-cli -h 192.168.50.128   -p 6379 --raw

   》redis-cli -h 127.0.0.1 -p 6379 shutdown    //停止

基础使用

redis在线测试地址:http://try.redis.io/

通过简单的语句set 和 get 语句读取数据:

>set  [key] [value]

>get [key]      

本地安装redis使用:

在解压包中有两个文件 :

    redis-server.exe  (服务端:默认端口6379)

              redis-cli.exe(客户端)

首先点击redis-server.exe开启服务,不要关闭哦。

redis-server ./redis.windows.conf

然后点击redis-cli.exe打开客户端。

最简单的数据输入输出就完成了。

 

配置:

redis的配置在redis.config 或者 redis.window.config 下。

打开文件有关于此项配置的说明,就知道可输入的参数有哪些,配置的说明:

不过要快速查找和设置还是用命令较快。

>config get *       // 查看所有配置项
>config get port // 查看端口号
>config set loglevel warning //设置配置
>config rewrite //使修改配置在下次启动有效,不然就仅仅本次

某些配置不能在命令中进行设置,需要直接修改配置文件,因为这关系到Redis服务器本身。例如:port和 daemonize等。

主要配置说明: 

dbfilename : dump.rdb    //默认数据库文件名

 daemonize :no            //守护进程为no,即依托于终端执行,一旦终端关闭则服务就停止。设为yes 则相当于服务中的 nohup命令一样。需要找到pid通过kill来杀掉进程。(在linux下有效,windows不支持)

 pidfile  /var/run/redis.pid   // 当守护进程设置为yes时,pid会默认指向其路径。

requirepass [密码]    //设置密码

常用命令:

>redis-cli -p 6380 ping  //测试是否联通

>redis-cli -p 6380 -r 10 ping  //测试十次用于判定网络的稳定性

>redis-cli -p 6380  set name "张三"    //可应对输入时乱码问题

>select [index]                                //切换库分片

 

 

 

数据类型

Redis支持五种常用数据类型:

string(字符串)

hash(哈希)

list(列表)

set(集合)

zset(sorted set:有序集合)

geo(地理位置)  --暂不做介绍

HyperLogLog(概率数据结构) --暂不做介绍

 

数据类型的完整命令用法:

      参见:http://redisdoc.com/

String:

String 是redis最基本的类型,因为是二进制存储,所以可以存储任何编码格式字符或数据,也可存储图片或序列化对象。最大存储512MB。

使用get和set的方式进行读取。

结构:set key value

           get key

127.0.0.1:6379> set userId 55112
OK
127.0.0.1:6379> get userId
"55112"
127.0.0.1:6379>

  》 setex name 10 "zhangsan"     //保留10秒

       》set name "zangs" NX               //如果没有则添加

hash:

Redis hash是一种键值对集合,适合于存储对象。

每个hash可以存储 232 -1 键值对(40多亿)。

结构: Hmset key field value [field value ...]

   Hget key field

127.0.0.1:6379> HMset testHs test1 zhangsan test2 lisi test3 wangwu
OK
127.0.0.1:6379> HGet testHs test2
"lisi"
127.0.0.1:6379>

  List:

Redis 列表是简单的字符串列表,按照顺序插入,仅可在最开始最后插入数据,不能在中间插入。最大支持 232 -1 笔数据。

结构:lpush key value [value ...]

          lpop  key

127.0.0.1:6379> lpush mylist zhangsan  lisi  wangmazi
(integer) 3
127.0.0.1:6379> lpush mylist zhaosi wangjun
(integer) 5
127.0.0.1:6379> lpop mylist
"wangjun"
127.0.0.1:6379> lrange mylist 0   10
1) "zhaosi"
2) "wangmazi"
3) "lisi"
4) "zhangsan"
127.0.0.1:6379>

        set:

       Redis的Set是string类型的无序集合,最多可添加 232 - 1笔数据,但set是不允许重复的。因此如果已经存在的数据,不能被覆盖掉,会返回0,成功插入为1.

      结构:sadd key member [member ...]

127.0.0.1:6379> sadd mySet 1 2 3 4 5
(integer) 5
127.0.0.1:6379> sadd mySet 67
(integer) 1
127.0.0.1:6379> sadd mySet 4 5
(integer) 0
127.0.0.1:6379> smembers mySet
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "67"
127.0.0.1:6379>

 

          ZSet(sorted set):

           zSet 和 set 集合一样都不允许重复,但是zSet会给每个成员分配一个score,这个分数可以重复,最后通过score进行从小到大排序。

            结构:zadd key [NX|XX] [CH] [INCR] score member [score member ...]

127.0.0.1:6379> zadd zSet 0 zhangsan 4 wangwu 2 lisi 0 zhangming
(integer) 4
127.0.0.1:6379> zadd zSet 1 zhonghua 2 zhonggong
(integer) 2
127.0.0.1:6379> zrange zSet 0 0
1) "zhangming"
127.0.0.1:6379> zrange zSet 0 6
1) "zhangming"
2) "zhangsan"
3) "zhonghua"
4) "lisi"
5) "zhonggong"
6) "wangwu"
127.0.0.1:6379>

redis命令

 客户端启动命令:    > redis-cli     //注意Redis要在环境变量中才可以

检查服务端是否连接: >ping         // 结果会是pong

远程访问Redis服务:

      首先确保本地有Redis的客户端。以本地演示为例:

     修改redis.windows-service.conf文件:

            1. 注释掉  bind 127.0.0.1,(注释用#)这样就可以通过外部访问       

C:\Users\zhaoq>redis-cli -h 192.168.202.67 -p 6379
192.168.202.67:6379>

            2. 给服务端添加密码 : 放开  # requirepass foobared。 修改foobared为自己的密码

或者为: redis-cli -h [ip] -p [port] -a [pwd]

C:\Users\zhaoq>redis-cli -h 192.168.202.67 -p 6380
192.168.202.67:6380> get userName
(error) NOAUTH Authentication required.
192.168.202.67:6380> auth dennyzhao
OK
192.168.202.67:6380>

keys:

键命令用于管理和操作redis 的键。

>keys *   //查看所有的key,可支持pattern

>exists [key]  //查找key是否存在

>dump [key]  //序列化key对象

>del [key]     //删除key,不支持模糊删除

具体命令参见:  http://redisdoc.com/key/index.html

其它数据类型在此不再陈述。

订阅和发布

redis通过订阅和发布模式实现数据的缓存和获取,即数据推送。

比如一个客户端作为主播(推送者)publish一个cctv1频道,有两个观众订阅(接收者)subscribe这个cctv1频道,这样主播发布的节目观众就可以实时看到。

> publish cctv1          // 发布频道节目

>subscribe cctv1       // 订阅频道节目

>pubsub channels    // 查看自己的发布或订阅

具体命令介绍参见 : http://redisdoc.com/pub_sub/index.html

Redis事务

 redis事务不同于数据库的事务,数据库的事务可以设置多种策略,事务具有一致性,而redis的事务仅仅将redis命令放在一起,统一执行。

步骤:开始事务(multi)-》命令入队-》执行事务(exec)

redis的原子性指单条命令的行为具有一致性,但在事务中不具备原子性。单个命令在执行过程中的成功与失败,不会回滚上一命令的结果,也不会影响下一命令的执行。

127.0.0.1:6380> multi
OK
127.0.0.1:6380> set username zhangsan
QUEUED
127.0.0.1:6380> get username
QUEUED
127.0.0.1:6380> keys *
QUEUED
127.0.0.1:6380> exec
1) OK
2) "zhangsan"
3) 1) "username"
127.0.0.1:6380>

具体命令介绍参见 : http://redisdoc.com/transaction/index.html

Redis脚本

Redis 脚本使用 Lua 解释器来执行脚本。目前内嵌有Lua环境。

*Lua由标准C编写而成,可在任何运行平台和环境中运行的内嵌入语音,Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,

Lua的速度是最快的。这一切决定Lua是作为嵌入式脚本的最佳选择。

 redis使用EVAL来执行脚本。

以下的脚本说明执行结构:

eval  script numkeys [key ....] [argv......]

key的占位符一定要用大写的KEYS[num],同样参数也是ARGV[num].num表示了数据的位置。

127.0.0.1:6380> eval "return {KEYS[1],KEYS[2],KEYS[3],ARGV[1],ARGV[3],ARGV[2]}" 3 id code name 1111 wangwu  5267
1) "id"
2) "code"
3) "name"
4) "1111"
5) "5267"
6) "wangwu"

在lua脚本中使用 redis.call()   或者  redis.pcall() 函数执行redis命令。

127.0.0.1:6380> eval "redis.call('set', KEYS[1], ARGV[1])" 1 user wangmazi
(nil)
127.0.0.1:6380> get user
"wangmazi"
127.0.0.1:6380>

注意:script脚本要用双引号,命令或内容非占位符要使用单引号。

具体命令介绍参见 :http://redisdoc.com/script/eval.html

Redis 连接

 在前面已经讲过,redis的基本连接

>redis-cli -h [ip] -p [port] -a [pwd]

在没有输入密码的情况下redis-cli -h [ip] -p [port]

然后再补密码:

>auth [pwd]

>echo [message]  //回显输入内容

>ping                     //测试连接是否畅通  回应 pong

>quit                     //关闭当前连接

Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。

127.0.0.1:6380> set db_number 0
OK
127.0.0.1:6380> select 1
OK
127.0.0.1:6380[1]> set db_number 1
OK
127.0.0.1:6380[1]> select 1
OK
127.0.0.1:6380[1]> select 0
OK
127.0.0.1:6380> set db_number 2
OK
127.0.0.1:6380> set db_number 3
OK
127.0.0.1:6380> select 2
OK
127.0.0.1:6380[2]>

具体命令介绍参见 :http://redisdoc.com/connection/index.html

Redis服务器

 通过info命令可以查看到服务器的所有信息配置。

>info

临时存储的数据都在缓存中,要写入磁盘用

>save

>client list   //当前了解的用户数

>time //当前时间

具体命令介绍参见 :     http://redisdoc.com/server/index.html

 

 

       

                       

posted on 2018-07-05 20:41  zhaoqiang1980  阅读(215)  评论(0编辑  收藏  举报