Redis持久化存储

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 安装和使用实例

环境:
[[email protected] /]# uname -r
2.6.32-504.el6.x86_64
[[email protected] /]# ifconfig eth0|awk -F ‘[ :]+‘ ‘NR==2{print $4}‘
192.168.179.161
[[email protected] /]# cat /etc/redhat-release
CentOS release 6.6 (Final)
[[email protected] /]# /etc/init.d/iptables status
iptables:未运行防火墙。
[[email protected] /]# 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
配置环境变量
[[email protected] redis-2.8.9]# echo ‘export PATH=/application/redis/bin/:$PATH‘ >>/etc/profile
[[email protected] redis-2.8.9]#
[[email protected] redis-2.8.9]# tail -1 /etc/profile
export PATH=/application/redis/bin/:$PATH
[[email protected] redis-2.8.9]# . /etc/profile
[[email protected] redis-2.8.9]# which redis-server
/application/redis/bin/redis-server
拷贝生成配置文件
[[email protected] redis-2.8.9]#  mkdir /application/redis/conf
[[email protected] redis-2.8.9]# pwd
 [[email protected] 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

常见操作

[[email protected] 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
非交互式
[[email protected] redis-2.8.9]# redis-cli -h 192.168.179.162 -p 6379 set k v
OK
[[email protected] redis-2.8.9]# redis-cli -h 192.168.179.162 -p 6379 get k
"v"
telnet 加IP 加端口也可以
[[email protected] 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的方式
[[email protected] redis-2.8.9]# echo "set no004 zsq"|nc 127.0.0.1 6379
+OK
[[email protected] 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 &

[[email protected] 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指定密码
[[email protected] 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

[[email protected] redis-2.8.9]# redis-cli shutdown
(error) NOAUTH Authentication required.#关闭都没权限
[[email protected] redis-2.8.9]# redis-cli -a zsq shutdown #指定密码关闭
[[email protected] redis-2.8.9]# redis-server /application/redis/conf/redis.conf & #启动
[[email protected] 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
时间: 2024-12-25 21:24:51

Redis持久化存储的相关文章

NoSQL数据库之redis持久化存储(一)

第1章 redis存储系统 1.1 redis概述 REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的Memcached缓存服务软件很像,但是redis支持的数据存储类型比memcached更丰富,包括strings(字符串),lists(列表),sets(集合)和sorted sets(有序集合)等. 这些数据类型支持push/pop,add/remove及取交集,并集和差集及更丰富的操作,而且这些操作

Redis持久化存储与主从复制

4. redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. 4.1 RDB持久化 redis提供了RDB持久化的功能,这个功能可以将redis在内存中的的状态保存到硬盘中,它可以手动执行. 也可以再redis.conf中配置,定期执行. RDB持久化产生的RDB文件是一个经过压缩的二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态.

架构设计:系统存储(16)——Redis事件订阅和持久化存储

接上文<架构设计:系统存储(15)--Redis基本概念和安装使用> 3-4.事件功能和配置项 Redis从2.X版本开始,就支持一种基于非持久化消息的.使用发布/订阅模式实现的事件通知机制.所谓基于非连接保持,是因为一旦消息订阅者由于各种异常情况而被迫断开连接,在其重新连接后,其离线期间的事件是无法被重新通知的(一些Redis资料中也称为即发即弃).而其使用的发布/订阅模式,意味着其机制并不是由订阅者周期性的从Redis服务拉取事件通知,而是由Redis服务主动推送事件通知到符合条件的若干订

redis的数据持久化存储

redis的数据持久化存储 Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化.Redis支持两种持久化方式: 一.snapshotting(快照)方式快照是默认的持久化方式.这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb.我们可以配置redis在n秒内如果超过若干个key被修改就自动做快照持久保存. 在约87行,有默认的快照策略(指定在多长时间内,有多少次更新操作,就将数据同步到数据快照文件,可以多个条件

Redis事件订阅和持久化存储

http://blog.csdn.net/yinwenjie/article/details/53518286 Redis从2.X版本开始,就支持一种基于非持久化消息的.使用发布/订阅模式实现的事件通知机制.所谓基于非连接保持,是因为一旦消息订阅者由于各种异常情况而被迫断开连接,在其重新连接后,其离线期间的事件是无法被重新通知的(一些Redis资料中也称为即发即弃).而其使用的发布/订阅模式,意味着其机制并不是由订阅者周期性的从Redis服务拉取事件通知,而是由Redis服务主动推送事件通知到符

redis的持久化存储

一. redis的高可用 在Redis中,实现高可用的技术主要包括持久化.复制.哨兵和集群 持久化:持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失. 复制:复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可用的.复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复.缺陷:故障恢复无法自动化:写操作无法负载均衡:存储能力受到单机的限制. 哨兵:在复制的基础上,哨兵实现了自动化的故障恢复

Redis持久化

Redis持久化功能简介: Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边. 数据保存到硬盘的过程就称为“持久化”效果. Redis持久化的两种方式:snap shotting  快照持久化  /  append only file   AOF持久化 snap shotting快照持久化 该持久化默认开启,一次性把redis中全部的数据保存一份存储在硬盘中,如果数据非常多(10-20G)就不适合频繁进行

Redis数据存储解决方案

1.背景1.1 Redis简介 官方网站:http://redis.io/,Redis是REmote DIctionary Server的缩写. Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持.它跟 memcached 类似,不过数据可以持久化,而且支持的数据类型很丰富.它在保持键值数据库简单快捷特点的同时,又吸收了部分关系数据库的优点.从而

Redis持久化以及其原理

一.Redis持久化 Redis之所以强大是因为其将所有数据都直接存储在内存中.可是,为了使Redis在重启后数据仍然不丢失,就需要把数据以某种方式持久化到磁盘中(这是使用它作系统缓存的一大优势).Redis支持两种方式进行持久化,一种是RDB,一种是AOF,可以使用一种方式,也可以混合使用它们两种方式. 二.RDB方式(默认的持久化方式) 2.1 RDBa方式简介 其实是通过snapshot快照的方式进行持久化的,当符合一定条件时,Redis会自动将内存中的所有数据快照存储到磁盘中.进行快照的