文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Reidis安装配置

2024-04-02 19:55

关注

一、Redis介绍


二、Redis安装

cd /usr/local/src
wget   https://codeload.github.com/antirez/redis/tar.gz/2.8.21
mv 2.8.21 redis-2.8.21.tar.gz
tar xf redis-2.8.21.tar.gz
cd redis-2.8.21
make && make PREFIX=/usr/local/redis install
mkdir /usr/local/redis/etc



错误:

在包含自 adlist.c:34 的文件中:

zmalloc.h:50:31: 错误:jemalloc/jemalloc.h:没有那个文件或目录

zmalloc.h:55:2: 错误:#error "Newer version of jemalloc required"

make[1]: *** [adlist.o] 错误 1

make[1]: Leaving directory `/usr/local/src/redis-2.6.6/src'

make: *** [all] 错误 2

解决:

make MALLOC=libc


三、Redis配置

vim  /usr/local/redis/etc/redis.conf============配置文件
daemonize yes
pidfile /usr/local/redis/var/redis.pid
port 6379
timeout 300
loglevel debug
logfile /usr/local/redis/var/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /usr/local/redis/var/
appendonly no
appendfsync always


下面是redis.conf的主 要配置参数的意义:

daemonize:是否以后台daemon方式运行

pidfile:pid文件位置

port:监听的端口号

timeout:请求超时时间

loglevel:log信息级别

logfile:log文件位置

databases:开启数据库的数量

save * *:保存快照的频率,第一个*表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。

rdbcompression:是否使用压缩

dbfilename:数据快照文件名(只是文件名,不包括目录)

dir:数据快照的保存目录(这个是目录)

appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。

appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)


=====================编写一个redis启动脚本

vi /etc/init.d/redis   //加入如下内容:
#!/bin/sh
#
# redis        init file for starting up the redis daemon
#
# chkconfig:   - 20 80
# description: Starts and stops the redis daemon.
# Source function library.
. /etc/rc.d/init.d/functions
name="redis-server"
basedir="/usr/local/redis"
exec="$basedir/bin/$name"
pidfile="$basedir/var/redis.pid"
REDIS_CONFIG="$basedir/etc/redis.conf"
[ -e /etc/sysconfig/redis ] && . /etc/sysconfig/redis
lockfile=/var/lock/subsys/redis
start() {
    [ -f $REDIS_CONFIG ] || exit 6
    [ -x $exec ] || exit 5
    echo -n $"Starting $name: "
    daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG"
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
stop() {
    echo -n $"Stopping $name: "
    killproc -p $pidfile $name
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
restart() {
    stop
    start
}
reload() {
    false
}
rh_status() {
    status -p $pidfile $name
}
rh_status_q() {
    rh_status >/dev/null 2>&1
}
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}"
        exit 2
esac
exit $?


因为脚本启动时以redis用户启动的,所以需要增加redis用户

useradd -s /sbin/nologin redis
mkdir /usr/local/redis/var
chmod 777 /usr/local/redis/var
chmod 755 /etc/init.d/redis
chkconfig  --add redis
chkconfig redis on
service redis start


四、Redis数据类型

string是最简单的类型,你可以理解成Memcached一样的类型,一个key对应一个value,骑上支持的操作与Memcached的操作类似,它的功能更丰富。设置可以存二进制的对象。

/usr/local/redis/bin/redis-cli 

127.0.0.1:6379> mset key1 szk key2 love key3 yc
OK
127.0.0.1:6379> mget key1 key2 key3
1) "szk"
2) "love"
3) "yc"


list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链接的名字。使用List结构,我们可以轻松的实现最新消息排行等功能。使用List结构,我们可以轻松地实现最新消息排行等功能。List的另一个应用就是消息队列,可以利用list的push操作,将任务存在list中,然后工作线程再用pop操作将任务取出进行执行。

127.0.0.1:6379> lpush list1 123
(integer) 1
127.0.0.1:6379> lpush list1 aaa
(integer) 2
127.0.0.1:6379> lpush list1 "123 456"
(integer) 3
127.0.0.1:6379> rpop list1
"123"
127.0.0.1:6379> rpop list1
"aaa"
127.0.0.1:6379> rpop list1


set是集合,和我们数学中的集合概念类似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为Redis非常人性化的为几个提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合 操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。QQ有一个社交功能叫做"好友标签",这时就可以使用redis的集合来实现,把每一个用户的标签都存储在一个集合之中。

127.0.0.1:6379> sadd set1 zbc
(integer) 1
127.0.0.1:6379> sadd set1 szk
(integer) 1
127.0.0.1:6379> smembers set1
1) "zbc"


sorted set是有序集合,它比set多了一个权重参数score,使得集合中的元素能够按score进行有序排列,比如一个存储全班同学成绩的Sorted Sets,其集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。

127.0.0.1:6379> zadd mset2 2 "cde 123"
(integer) 1
127.0.0.1:6379> zadd mset2 4 "a123a"
(integer) 1
127.0.0.1:6379> zadd mset2 24 "123-aaa"
(integer) 1
127.0.0.1:6379> zrange mset2 0 -1
1) "cde 123"
2) "a123a"
3) "123-aaa"


hash:在memcached中,经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值(一般是JSON格式),比如用户的昵称、年龄、性别、积分等。


五、Redis持久化


六、Redis通用配置


七、Redis快照配置(rdb持久化)


八、Redis安全相关配置

vim /usr/local/redis/etc/redis.conf  #设置redis-server的密码

#增加下面配置

requirepass szk    


/usr/local/redis/bin/redis-cli -a szk  #-a指定密码登录




九、Redis限制相关配置


十、Redis AOF持久化相关配置


十一、Redis慢日志相关配置


十二、Redis主从配置

tail /usr/local/redis/var/redis.log 
3966] 18 Feb 15:02:58.330 * MASTER <-> SLAVE sync: receiving 192 bytes from master
[3966] 18 Feb 15:02:58.330 * MASTER <-> SLAVE sync: Flushing old data
[3966] 18 Feb 15:02:58.330 * MASTER <-> SLAVE sync: Loading DB in memory
[3966] 18 Feb 15:02:58.330 * MASTER <-> SLAVE sync: Finished with success
[3966] 18 Feb 15:03:03.344 - DB 0: 7 keys (0 volatile) in 8 slots HT.
[3966] 18 Feb 15:03:03.344 - 1 clients connected (0 slaves), 466840 bytes in use
[3966] 18 Feb 15:03:08.396 - DB 0: 7 keys (0 volatile) in 8 slots HT.
[3966] 18 Feb 15:03:08.397 - 1 clients connected (0 slaves), 466848 bytes in use


测试:

/usr/local/redis/bin/redis-cli -a szk           主

127.0.0.1:6379> set key1 szk

OK

127.0.0.1:6379> get key1            

"szk"


/usr/local/redis/bin/redis-cli             从

127.0.0.1:6379> get key1

"szk"


OK


十三、Redis主从其他相关配置


十四、string常用操作

127.0.0.1:6379> set key1 szk  #给key1赋值为szk
OK 
127.0.0.1:6379> get key1    #获取这个值value
"szk"
127.0.0.1:6379> set key1 yc  #一个key对应一个value,多次赋值,会覆盖前面的value
OK
127.0.0.1:6379> get key1  
"yc"
127.0.0.1:6379> setex key3 10 1   #用来给key设定过期时间,ttl key3查看时间
OK
127.0.0.1:6379> mset key1 1 key2 2 key3 3    #同时设置多个key
OK
127.0.0.1:6379> mget key1 key2 key3    
1) "1"
2) "2"
3) "3"


十五、Hash常用操作

127.0.0.1:6379> hset hash2 name szk
(integer) 1
127.0.0.1:6379> hset hash2  age 23
(integer) 1
127.0.0.1:6379> hset hash2  job it
(integer) 1
127.0.0.1:6379> hgetall hash2 
1) "name"
2) "szk"
3) "age"
4) "23"
5) "job"
6) "it"
127.0.0.1:6379> hmset hash3 name yc age 24 job teacher    #批量创建
OK
127.0.0.1:6379> hgetall hash3
1) "name"
2) "yc"
3) "age"
4) "24"
5) "job"
6) "teacher"
127.0.0.1:6379> hdel hash3 job     #删除某个值
(integer) 1
127.0.0.1:6379> hgetall hash3
1) "name"
2) "yc"
3) "age"
4) "24"
127.0.0.1:6379> hkeys hash3   #查看所有的key
1) "name"
2) "age"
127.0.0.1:6379> hvals hash3   #查看所有的values
1) "yc"
2) "24"
127.0.0.1:6379> hlen hash3    #查看hash有几个filed
(integer) 2

十六、list常用操作

127.0.0.1:6379> lpush list1 a    #从左边插入
(integer) 3
127.0.0.1:6379> lpush list1 b     #从左边插入
(integer) 4
127.0.0.1:6379> lpush list1 c      #从左边插入
(integer) 5
127.0.0.1:6379> lrange list1 0 -1       #从左边往右罗列,最先插入在最后边
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> lpop list1          #从最左边取出
"c"
127.0.0.1:6379> lrange list1 0 -1    #从左边往右罗列
1) "b"
2) "a"
127.0.0.1:6379> rpush list1 1          #从右边插入
(integer) 5
127.0.0.1:6379> rpush list1 2           #从右边插入
(integer) 6
127.0.0.1:6379> rpush list1 3           #从右边插入
(integer) 7
127.0.0.1:6379> lrange list1 0 -1       #从右往左罗列,最后插入在最后边
1) "b"
2) "a"
3) "1"
4) "2"
5) "3"
127.0.0.1:6379> linsert list1  before 3  5        #在3前面插入一个5
(integer) 8
127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) "a"
3) "1"
4) "2"
5) "5"
6) "3"
127.0.0.1:6379> lset list1 7 6             #将0开始的第7个元素换成6
OK
127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) "a"
3) "456"
4) "123"
5) "1"
6) "2"
7) "5"
8) "6"
127.0.0.1:6379> lindex list1 7     #查看从0开始的第7个元素
"6"
127.0.0.1:6379> llen list1          #查看列表中有几个元素
(integer) 8

十七、set数据常用操作 

127.0.0.1:6379> sadd set1 1        #向集合set1中放入元素
(integer) 1
127.0.0.1:6379> sadd set1 2
(integer) 1
127.0.0.1:6379> sadd set1 3
(integer) 1
127.0.0.1:6379> sadd set1 4
(integer) 1
127.0.0.1:6379> smembers set1    #查看集合中所有元素
1) "zbc"
2) "1"
3) "szk"
4) "2"
5) "3"
6) "4"
127.0.0.1:6379> spop set1     #随机取出一个元素,删除
"szk"
127.0.0.1:6379> sdiff set1 seta       #比较差集,以set1为主来比较
1) "zbc"
2) "4"
127.0.0.1:6379> sdiffstore set3  seta set1   #比较差集,将结果存入set3中
(integer) 2
127.0.0.1:6379> SMEMBERS set3    #tab自动补全,但显示为大写
1) "2"
2) "szk"


十八、zset常用操作

127.0.0.1:6379> zadd zset1 1 abc     #创建有序集合
(integer) 1
127.0.0.1:6379> zadd zset1 10 aabc   #创建有序集合
(integer) 1
127.0.0.1:6379> zadd zset1 5 aaa    #创建有序集合
(integer) 1
127.0.0.1:6379> zadd zset1 88 bbb   #创建有序集合
(integer) 1
127.0.0.1:6379> zadd zset1 888 szk   #创建有序集合
(integer) 1
127.0.0.1:6379> ZRANGE zset1 0 -1   #显示所有元素,按顺序显示
1) "abc"
2) "aaa"
3) "aabc"
4) "bbb"
5) "szk"
127.0.0.1:6379> ZRANGE zset1 0 -1 withscores    #可以带上分值
 1) "abc"
 2) "1"
 3) "aaa"
 4) "5"
 5) "aabc"
 6) "10"
 7) "bbb"
 8) "88"
 9) "szk"
10) "888"
127.0.0.1:6379> ZREM zset1 abc       #删除指定元素
(integer) 1
127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
1) "aaa"
2) "5"
3) "aabc"
4) "10"
5) "bbb"
6) "88"
7) "szk"
8) "888"
127.0.0.1:6379> zrevrank zset1 szk  #返回元素的索引值,索引值从0开始,按score正向排序
(integer) 0
127.0.0.1:6379> zrank zset1 szk     #同上,不同的是,按score反序排序
(integer) 3
127.0.0.1:6379> ZCARD  zset1   #查看集合元素的个数
(integer) 4 
127.0.0.1:6379> zcount zset1 1 20   #查看分值区间内的元素个数
(integer) 2
127.0.0.1:6379> zrangebyscore zset1 1 100 withscores   #返回分支范围在1-100的元素
1) "aaa"
2) "5"
3) "aabc"
4) "10"
5) "bbb"
6) "88"
127.0.0.1:6379> zrangebyscore zset1 0 10    #删除分支范围在0-10的元素,按score排序
1) "aaa"
2) "aabc"


十九、键值和服务器命令

127.0.0.1:6379> keys *            #列出所有键值
 1) "key3"
 2) "seta"
 3) "hash2"
 4) "list1"
 5) "key2"
 6) "zset1"
 7) "mset2"
 8) "set2"
 9) "set1"
10) "key1"
11) "hash3"
12) "set3"
127.0.0.1:6379> keys key*
1) "key3"
2) "key2"
3) "key1"
127.0.0.1:6379> EXISTS list1      #查看是否有list1
(integer) 1
127.0.0.1:6379> del key1      #删除key1
(integer) 1
127.0.0.1:6379> EXISTS key1
(integer) 0
127.0.0.1:6379> EXPIRE key3 10     #设置过期时间
(integer) 1
127.0.0.1:6379> get key3
"3"
127.0.0.1:6379> ttl key3    #查看key的过期时间,-1不存在过期  -2不存储键值
(integer) -2
127.0.0.1:6379> EXists key3
(integer) 0
127.0.0.1:6379> select 0     #切换库,默认16个库
OK
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set key1 111   #新建一个键值
OK
127.0.0.1:6379[1]> keys *
1) "key1"
127.0.0.1:6379[1]> move set1 2    #移动到库2
(integer) 0
127.0.0.1:6379[1]> select 2     #切换库2
OK
127.0.0.1:6379[2]> keys *    
1) "key1"
127.0.0.1:6379[2]> EXPIRE key1 200    #设置过期时间
(integer) 1
127.0.0.1:6379[2]> ttl key1
(integer) 193
127.0.0.1:6379[2]> PERSIST key1     #取消过期时间
(integer) 1
127.0.0.1:6379[2]> ttl key1
(integer) -1
127.0.0.1:6379[2]> RANDOMKEY    #随机返回一个key
"key1"
127.0.0.1:6379[2]> RENAME key1 szk   #更改一个key的名字
OK
127.0.0.1:6379[2]> keys *
1) "szk"
127.0.0.1:6379[2]> type szk         #查看一个键值的类型
string


二十、服务相关的操作

127.0.0.1:6379[2]> DBSIZE    #查看一个库的键值数
(integer) 1
127.0.0.1:6379[2]> select 0
OK
127.0.0.1:6379> DBSIZE 
(integer) 10
127.0.0.1:6379> info   #查看redis服务信息
# Server
redis_version:2.8.21
redis_git_sha1:00000000
略
127.0.0.1:6379> flushdb    #清空当前数据库中所有的键
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> flushall   #清空所有数据库中的所有的key
OK
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)

二十一、PHP中应用Redis

cd /usr/local/src
wget  http://pecl.php.net/get/redis-2.2.5.tgz
tar xf redis-2.2.5.tgz
cd redis-2.2.5
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-confi
make ; make install
mv /usr/local/php/lib/php/extensions/no-debug-zts-20100525/redis.so /usr/lib64/
vim /usr/local/php/php.iniextension_dir = /usr/lib64/extension = redis.so
usr/local/php/bin/php -m | grep redisredis


## 加载成功,可以重启 nginx 看看 phpinfo 页


二十二、Redis实现session共享

session.save_handler = "redis"

session.save_path = "tcp://127.0.0.1:6379"

php_value session.save_handler "redis"

php_value session.save_path "tcp://127.0.0.1:6379"

php_value[session.save_handler] = redis

php_value[session.save_path] = " tcp://127.0.0.1:6379 "


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯