码迷,mamicode.com
首页 > 其他好文 > 详细

Redis持久化存储

时间:2017-04-21 23:53:19      阅读:439      评论:0      收藏:0      [点我收藏+]

标签:app   init.d   password   abs   style   性能测试   sof   设置密码   服务器   

技术分享

 

Redis介绍

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

?   Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

?   Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的 另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

官方文档: https://redis.io/documentation

Redis 在新浪微博中的应用

http://www.cnblogs.com/me115/p/3482783.html

Redis 安装和使用实例

环境:
[root@redis /]# uname -r
2.6.32-504.el6.x86_64
[root@redis /]# ifconfig eth0|awk -F ‘[ :]+‘ ‘NR==2{print $4}‘
192.168.179.161
[root@redis /]# cat /etc/redhat-release 
CentOS release 6.6 (Final)
[root@redis /]# /etc/init.d/iptables status
iptables:未运行防火墙。
[root@redis /]# getenforce
Permissive
#3.0版本源码安装也一样
wget -q http://download.redis.io/releases/redis-2.8.9.tar.gz   
tar xf redis-2.8.9.tar.gz
cd redis-2.8.9
#less README
make MALLOC=jemalloc
make PREFIX=/application/redis-2.8.9 install
ln -s /application/redis-2.8.9/ /application/redis

tree /application/redis
/application/redis
`-- bin
    |-- redis-benchmark     # Redis性能测试工具,测试Redis在系统及你的配置下的读写性能。
    |-- redis-check-aof     # 更新日志检查。
    |-- redis-check-dump    # 用于本地数据库检查。
    |-- redis-cli           # Redis命令行操作工具。也可以telnet根据其纯文本协议操作
    `-- redis-server        # Redis服务器的daemon启动程序。
1 directory, 5 files
配置环境变量
[root@redis01 redis-2.8.9]# echo ‘export PATH=/application/redis/bin/:$PATH‘ >>/etc/profile
[root@redis01 redis-2.8.9]# 
[root@redis01 redis-2.8.9]# tail -1 /etc/profile
export PATH=/application/redis/bin/:$PATH
[root@redis01 redis-2.8.9]# . /etc/profile
[root@redis01 redis-2.8.9]# which redis-server
/application/redis/bin/redis-server
拷贝生成配置文件
[root@redis01 redis-2.8.9]#  mkdir /application/redis/conf
[root@redis01 redis-2.8.9]# pwd
 [root@redis01 redis-2.8.9]# cp redis.conf /application/redis/conf/
启动redis
redis-server /application/redis/conf/redis.conf &
[20222] 29 Nov 20:43:48.571 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1‘ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1‘ for this to take effect.
[20222] 29 Nov 20:43:48.571 * The server is now ready to accept connections on port 6379
检查端口
lsof -i :6379
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
redis-ser 20222 root    4u  IPv6 1523437      0t0  TCP *:6379 (LISTEN)
redis-ser 20222 root    5u  IPv4 1523439      0t0  TCP *:6379 (LISTEN)

去掉上面的警告信息
sysctl vm.overcommit_memory=1
echo vm.overcommit_memory=1 >>/etc/sysctl.conf
sysctl -p
关闭redis操作的命令
redis-cli shutdown save

 

常见操作

[root@redis01 redis-2.8.9]# redis-cli
127.0.0.1:6379> set id 001  #插入数据:设置一个key-value对
OK
127.0.0.1:6379> get id   #查询数据:取出key所对应的value
"001"
127.0.0.1:6379> del id #删除键值
(integer) 1
127.0.0.1:6379> get id  #查询数据
(nil)
127.0.0.1:6379> exists id   #验证是否存在,1代表存在,0代表不存在
(integer) 0

127.0.0.1:6379> set user001 oldboy
OK
127.0.0.1:6379> set user002 zsq
OK
127.0.0.1:6379> set user003 test
OK
127.0.0.1:6379> get user001
"oldboy"
127.0.0.1:6379> keys *   #取出所有
1) "user003"
2) "user002"
3) "user001"

select可以切换库从0到15  ,在第一个库创建的内容其它库是不可见的
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> set name oldboy
OK
127.0.0.1:6379[1]> get name
"oldboy"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "user003"
2) "user002"
3) "user001"
127.0.0.1:6379> select 16
(error) ERR invalid DB index
127.0.0.1:6379[16]> select 15
OK

其它连接方式

redis-cli -h 192.168.179.162 -p 6379
非交互式
[root@redis01 redis-2.8.9]# redis-cli -h 192.168.179.162 -p 6379 set k v
OK
[root@redis01 redis-2.8.9]# redis-cli -h 192.168.179.162 -p 6379 get k
"v"
telnet 加IP 加端口也可以
[root@redis01 redis-2.8.9]# telnet 192.168.179.162 6379
Trying 192.168.179.162...
Connected to 192.168.179.162.
Escape character is ^].
set a b
+OK
get a
$1
B
nc的方式
[root@redis01 redis-2.8.9]# echo "set no004 zsq"|nc 127.0.0.1 6379
+OK
[root@redis01 redis-2.8.9]# echo "get no004 "|nc 127.0.0.1 6379
$3
zsq

redis的帮助

redis-cli  --help
192.168.179.162:6379> help
redis-cli 2.8.9
Type: "help @<group>" to get a list of commands in <group>
      "help <command>" for help on <command>
      "help <tab>" to get a list of possible help topics
      "quit" to exit

redis的安全账户密码及授权权限

vim /application/redis/conf/redis.conf
335 # Warning: since Redis is pretty fast an outside user can try up to
336 # 150k passwords per second against a good box. This means that you should
337 # use a very strong password otherwise it will be very easy to break.、
339行设置密码
339 requirepass zsq
重启生效
redis-cli shutdown
 redis-server /application/redis/conf/redis.conf &

[root@redis01 redis-2.8.9]# redis-cli
127.0.0.1:6379> set k v
(error) NOAUTH Authentication required. #提示权限不够
127.0.0.1:6379> auth zsq  #用auth加密码
OK
127.0.0.1:6379> set k v
OK
非交互式 –a指定密码
[root@redis01 redis-2.8.9]# redis-cli -a zsq
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> get k2
"v2"
停止redis
redis-cli -a zsq shutdown
可以屏蔽跟改名
# It is possible to change the name of dangerous commands in a shared
# environment. For instance the CONFIG command may be renamed into something
# hard to guess so that it will still be available for internal-use tools
# but not available for general clients.
#
# Example:
#
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
rename-command set ""  #比如屏蔽这个set

[root@redis01 redis-2.8.9]# redis-cli shutdown  
(error) NOAUTH Authentication required.#关闭都没权限
[root@redis01 redis-2.8.9]# redis-cli -a zsq shutdown #指定密码关闭
[root@redis01 redis-2.8.9]# redis-server /application/redis/conf/redis.conf & #启动
[root@redis01 redis-2.8.9]# redis-cli  
127.0.0.1:6379> set k v #执行set
(error) ERR unknown command set   #提示找不到这个命令
127.0.0.1:6379>

在php环境中安装redis的客户端扩展

# 1、下载安装
wget https://github.com/phpredis/phpredis/archive/master.zip

unzip phpredis-master.zip
cd phpredis-master
/application/php/bin/phpize
./configure --with-php-config=/application/php/bin/php-config
make
make install

cd/application/php-5.6.8/lib/php/extensions/no-debug-non-zts-20131226/
ls
memcache.so  opcache.a  opcache.so  redis.so


# 2、修改php.ini设置,重启php
在php.ini追加一条记录
echo "extension = redis.so" >> /application/php/lib/php.ini

#重启 php-fpm
killall php-fpm
/application/php/sbin/php-fpm

#网页测试

php程序实战操作redis服务

必须要有php环境
cat /application/php/bin/php 1.php
<?php
     $redis = new Redis();
     $redis ->connect(192.168.179.162,6379);
     $redis ->auth(zsq);
     $redis ->set(name,zsq);
     $var = $redis ->get(name);
     echo "$var\n";
?>

Python操作Redis

pip install redis
or
sudo easy_install redis
or
sudo python setup.py install

详见:
https://github.com/WoLpH/redis-py
https://pypi.python.org/pypi/redis
https://redislabs.com/python-redis

 

Redis持久化存储

标签:app   init.d   password   abs   style   性能测试   sof   设置密码   服务器   

原文地址:http://www.cnblogs.com/w787815/p/6746513.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!