Redis简介

1.Redis简介

1.2.Redis是什么

Redis是一个开源的,使用ANSI C 编写,高性能的Key-Value的NoSQL数据库。

1.2.Redis特点

(1)基于内存
(2)可持久化数据
(3)具有丰富的数据结构类型,适应非关系型数据的存储需求
(4)支持绝大多数主流开发语言,如C、C++、Java、Python、R、JavaScript等。
(5)支持集群模式,高效、稳定。

1.3数据模型(重点)

(1)键值对形式。
(2)Redis的数据结构类型,指的就是Redis值的结构类型。

image.png

1.4.Redis作用

(1)本质是数据库,能存储数据。
Redis能灵活处理非关系型数据的读、写问题,是对MySQL等关系型数据库的补充。
新浪微博就是使用Redis集群做数据库。
(2)缓存数据。
所谓缓存,就是将数据加载到内存中后直接使用,而不是每次都通过IO流从磁盘上读取。好处:读写效率高。
而Redis则是将数据直接存储在内存中,只有当内存空间不足时,将部分数据持久化到磁盘????

2.Redis安装

2.1.说明

本课程是在Linux上安装Redis。
而Redis官方只提供了源码,并没有提供经过编译之后的安装包。
因此,安装Redis,要先编译、后安装。(即源码安装方式)

2.2.redis安装步骤

1)、下载,上传到Linux服务器,并解压
2)、预编译(实际上是检查编译环境的过程)
进入目录: cd /opt/soft/redis-3.2.9/deps/jemalloc
执行预编译 ./configure
在预编译的过程中,会检测安装redis所需的相关依赖,依次安装即可。
(a)缺少c编译环境 yum -y install gcc-c++
预编译不是必须的步骤,它只是在检查编译过程中需要的环境是否满足。
通常源码包中,都有一个可执行的configure脚本,这个脚本执行预编译的脚本。但是有一些源码包中,没有该文件,可以省略预编译步骤。
3)、编译 进入/opt/soft/redis-3.2.9/src
make
4)、安装 进入/opt/soft/redis-3.2.9/src
make install
5)、启动redis服务端(指定配置文件)
拷贝redis.conf文件到/etc 目录下,方便管理。
cp /opt/soft/redis-3.2.9/redis.conf /etc/
/usr/local/bin/redis-server /etc/redis.conf

image.png

6)、启动redis客户端,登陆 /usr/local/bin/redis-cli

image.png

7)、安装成功

2.3.redis.conf常用配置说明

2.3.1.requirepass foobar

给redis设置密码

image.png

在客户端使用auth命令,验证密码。

image.png

2.3.2.databases 16

Redis默认有16个数据库,寻址角标从0开始。
默认连接db0

image.png

客户端使用select命令,切换数据库

image.png

2.3.3.port 6379

指定redis的服务端口,默认6379.

image.png

2.3.4.daemonize no

image.png

Redis默认关闭后台进程模式,该成yes,redis服务在后台启动。

2.3.5.loglevel notice(了解)

image.png

2.3.6.logfile “ ”

Redis日志输出目录,默认不输出日志到文件。

image.png

2.3.7.dbfilename dump.rdb、dir ./

指定数据持久化的文件名及目录。

image.png

2.4.将redis添加为系统服务

2.4.1.第一步:开启后台模式

修改配置文件,将daemonize改为yes

2.4.2.第二步:创建shell脚本

说明:Linux系统服务,在/etc/init.d目录下创建redis脚本

###########################
#chkconfig: 2345 10 90
#description: Start and Stop redis
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
   
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli
   
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis.conf"
PASSWORD=$(cat $CONF|grep '^\s*requirepass'|awk '{print $2}'|sed 's/"//g')
   
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        if [ "$?"="0" ] 
        then
              echo "Redis is running..."
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
if [ -z $PASSWORD ]
then 
    $CLIEXEC -p $REDISPORT shutdown
else
    $CLIEXEC -a $PASSWORD -p $REDISPORT shutdown
fi
                #$REDIS_CLI -p $REDISPORT SHUTDOWN
                while [ -x ${PIDFILE} ]
               do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
   restart|force-reload)
        ${0} stop
        ${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
        exit 1
esac
##############################

2.4.3.第三步:添加shell脚本可执行权限

[root@node0927 ~]chmod +x /etc/init.d/redis

2.4.4.第四步:添加Redis开机启动

[root@node0927 ~]chkconfig redis on

[root@node0927 ~]chkconfig redis on

3.Redis的键key

3.1.key的类型

redis的key 值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。
空字符串也是有效key值。
redis建议使用字符串做为key的类型

127.0.0.1:6379> set user:id:1:username lisi 

OK 

127.0.0.1:6379> set user:id:1:password 111111

OK 

127.0.0.1:6379> set user:id:1:email [<u>lisi</u><u>@</u><u>163.com</u>](mailto:lisi@163.com)

OK 

127.0.0.1:6379> keys user:id:1* #查找有几个属性

1) "user:id:1:password" 

2) "user:id:1:username" 

3) "user:id:1:email" 

127.0.0.1:6379>

2.2.key取值规范

(1)键值不需要太长,消耗内存,在数据中查找这类键值的计算成本较高
(2)键值不宜过短,可读性较差,通常建议见名知意。

3.2.1.取值举例

将如下数据库表中的数据,转换为redis的key-value存储

id    username    password    email
1     lisi         111111     lisi@163.com
127.0.0.1:6379> set user:id:1:username lisi      
OK
127.0.0.1:6379> set user:id:1:password 111111
OK
127.0.0.1:6379> set user:id:1:email lisi@163.com
OK
127.0.0.1:6379> keys user:id:1* #查找有几个属性
1) "user:id:1:password"
2) "user:id:1:username"
3) "user:id:1:email"
127.0.0.1:6379>

3.3.Key命令

**exists**** key**  

检查给定key是否存在。

**del**** key**

**删除一个key**

**del key1 key2 key3****  删除多个key**

**keys**** pattern**** (模糊查找)**

查找所有符合给定模式 pattern 的key 。

keys * 匹配数据库中所有key 。

keys n?me 匹配name、neme、nfme 等。

keys n* 匹配name、neme、naaaaame等。

keys n[ae]me 只能匹配 name、neme。

**expire** **key** **seconds**

**指定key的过期时间。**

**新添加的key,如果没有指定过期时间,则会一直保存。**

**可以对一个已经带有生存时间的key执行**[**EXPIRE**](#expire)**命令,新指定的生存时间会取代旧的生存时间。**

**ttl** **key   (time to live)**

**查看某个key的剩余过期时间,返回值:**

**-2 表示这个key已经过期,删除掉**

**-1 表示没有设置过期时间**

**其它 表示剩余的生存时间,单位为秒。**

**rename**

**语法格式:rename**** key newkey**

将 key 改名为newkey 。

当 key 和newkey 相同,或者key 不存在时,返回一个错误。

当 newkey 已经存在时,[<u>RENAME</u>](#rename) 命令将覆盖旧值。

**type** key

查看key对应的value的数据结构类型。

**其它key命令见redis帮助文档   ****http://doc.redisfans.com/**

3.Redis的值value(数据结构类型)

Redis的数据结构类型,指的就是redis的值value的类型;
Redis常用的数据结构类型:string、list、set、sortedSet、hash

4.4.string类型

    string类型是redis最常用的数据结构类型,存储的值为字符串。

4.4.1.String相关命令

set key value 
设置一个key,值为value,类型为String类型;如果这个key已经存在,则更新这个key的值。
返回值
1 表示成功
0 表示失败

setnx key value
如果这个key不存在,则设置一个key,值为value;如果key存在,则不做更新。
返回值
1 表示成功
0 表示失败

get key
获取key对应的value值;如果key不存在,则返回nil


mget key1 key2 key3
一次获取多个key的值,如果对应key不存在,则对应返回nil。

incr key
将 key 中储存的数字值增一,然后返回。
如果这个key不存在,那么key的值会先被初始化为0,然后再执行INCR
操作。
    如果这个key对应的value值,不能表示数字,则会返回一个错误。
incrby key increment
    将key增加指定的步长值。
decr key
将 key 中储存的数字值减一,然后返回。
如果这个key不存在,那么key的值会先被初始化为0,然后再执行INCR操作。
如果这个key对应的value值,不能表示数字,则会返回一个错误。

Redis的key是单线程模式,这就意味一瞬间只有一个线程能够持有这个key,所以可以使用redis解决部分涉及线程安全的业务。比如,在初级时候通过多线程模拟卖票,使用加锁的方式,保证只有一个线程能够持有锁,进行买票业务。

decrby key decrement
将key减少对应的步长值。

append key value
如果key已经存在,则将value追加到这个key原先的value值的末尾。
    如果这个key不存在,则执行set操作。

127.0.0.1:6379> help @string 查看string类型的帮助文档
127.0.0.1:6379> help set   查看set命令的帮助文档
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。