听雷哥浅谈Redis
Linux下安装redis
1、下载源码,解压缩后编译源码。
$ wget http://download.redis.io/releases/redis-2.8.3.tar.gz
$ tar xzf redis-2.8.3.tar.gz
$ cd redis-2.8.3
$ make make install
2、编译完成后,在Src目录下,有四个可执行文件redis-server、redis-benchmark、redis-cli和redis.conf。然后拷贝到一个目录下。
mkdir /usr/redis
cp redis-server /usr/redis
cp redis-benchmark /usr/redis
cp redis-cli /usr/redis
cp redis.conf /usr/redis
cd /usr/redis
3、启动Redis服务。
$ redis-server redis.conf
4、然后用客户端测试一下是否启动成功。
$ redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
redis操作
string数据类型
set name zhilei
get name
setnx #如果key不存在则设置,如果存在,则返回0
setex name 10 zhilei #声明一个变量,且加上超时时间
set email wangzhilei@jd.com #对于这个声明好的变量进行部分内容进行更改
setrange email 3 wulong@jd.com
get email
wangwulongok@jd.com
mset name zhilei age 10 #批量的赋值
msetnx #批量设置,如果有一个key存在的话,则返回0
mget name age #批量的取值
incr age #让一个值递增1
incrby age 10 #让一个值递增固定的值
decr age #让一个值递减
decrby age 100 #让一个值递减固定的值
getset name yinchao #重新给一个变量赋值,但是返回原来的变量的值
getrange email 0 6 #返回一个字符串的部分内容
append name aa #给一个key加入相关的内容
strlen name #获取一个key的值的长度
hashes 类型
hset #设置
hsetnx #如果不存在的话,则设置
hget #获取
hmset #批量赋值
hmget #批量获取
hlen #显示字段的个数
hincrby #递增
hexists #判断hashed key是否存在 如果存在的话,则返回1,如果不存在的话,则返回0
hkeys #返回hashed下面所有的字段
hvals #返回hashes对象下面所有的值
hgetall #key val 一起获取
hdel #删除hash对象下面某个key的某个字段
list类型
栈存入
lpush list1 zhilei 10 #向栈里面加入两个值
lrange list1 0 -1 #取这个栈内的数据
队列存入
rpush
Linsert list1 before “one” “two” #插入
Lset #将一个值修改
Lrem #删除队列中几个相内的内容
Ltrim #删除非指定key范围内的值 ,其它的都删除
Lpop #从list从头弹出一个元素
Rpop #从尾部弹出
Rpoplpush #将一个链表的尾部的元素弹出,赋给第二个链表的头部
Lindex #按索引来取值
Sets与zset类型 (集合数据类型) 注意:集合内部不能有重复的值
特点:无序
方法
Sadd name zhilei #给name集合设置值
Smembers name #取name集全下面所有的值
Srem name zhieli #删除name集合下面的zhilei
Spop name #随机的弹出一个值,(删除弹出的值)
Sdiff set1 set2 #两个集合的差集
Sdiffstore set3 set1 set2 #将前两个集合差集存到set3中
Sinter set1 set2 #取两个集合的交集
Sinterstore set1 set2 set3 #将后面的两个集合的交集存话到set1中
Sunion set1 set2 #取两个集合的并集
Sunionstore set3 set1 set2 #两set1 set2两个并集到set3中
Smove set1 set2 name #将第一个集合内的一个值放到set2中
Scard #查看集合内元素的个数
Sismember set1 one #判断一个元素是否为一个集合的元素
Srandmember set1 #随机取一个元素,但不删除元素
有序集合 stored sets
Zadd #添加元素 例:Zadd class 1 one
Zrange class 0 -1 withscores #取值(withscores将排行号给取出来 )
Zrem class one #删除一个元素,返回1的话 则代表删除成功
Zincrby #给指定的顺序增加 例子:zincrby zsets 3 one 将集合zsets 中元素one的排序加上3
Zrank #按score排序列从小到大排序 ,并返回一个元素的索引 这个是按score的升序来排序
Zrevrank #按排序列从大到小排序 ,并返回一个元素的索引 这个是按score的降序来排序
Zrevrange #倒序,然后取索引范围 withscores 加上排序值 也就是说这个是按索引来倒过来排序
Zrangebyscore #按排序范围值来取
Zcount #返回区间内空的个数 也是按score来取个数
Zcard #返回集合中所有的元素的个数
Zremrangebyrank set1 0 1 #按索引来删除
Zremrangebyscore #set 0 2 #按排序来删除
Redis常用命令
Keys * 输出所有的键
Exists #判断一个键是否存在
Del #删除一个键
Expire #设置一个键的过期时间
Ttl #查看一个key的过期时间
Move age 1 #将一个数据库的key age 剪切到1数据库
Persist age #取消过期
Randomkey #随机返回一个key
Rename #给一个key重命名
Type #返回key的数据类型
服务器相关的命令
Ping
Echo
Select 0-15 共15个数据库
Quit 或者是 exit
Dbsize #返回当前数据中key总量
Info #获取服务器的信息
Config get #实时传储收到请求
Flushdb #删除当前数据库所有库
Flushall #删除所有数据库的所有key
Redis高级应用
- 1. 安全性
- 2. 主从复制
- 3. 事务处理
- 4. 持久化机制
- 5. 发布订单消息
- 6. 虚拟内存的使用
安全性:
在配置文件中 修改requirepass 后面直接是redis密码
Auth passwd 来登录进去 或者是登录时候 用 -a 密码
主从复制:
- 在从机配置slaveof
- 配置masterauth
- 判断哪个是主 哪个是从只要命令info
Redis事务处理
Multi
中间是事务的内容
如果想回滚discard
Exec
乐观锁
用watch来监控一个key,并执行事务,这个时候,如果有另外的一个session来改变这个key值,则这个key版本的值已经不是最新的了,这样的话,则事务则不会执行成功
相当于svn 与givhub 如果服务器上面的版本为4 如果将上传的版本改为3,则不能上传成功,必须为4以上的版本
例:
Session1:
127.0.0.1:6379> get name
"aaaaaa"
127.0.0.1:6379> WATCH name
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name zongbin
QUEUED
127.0.0.1:6379> exec
(nil)
Session 2:
Set name newword
Redis持久化机制
两种方式:
Snapshotting 快照 相当于mysqldump
Append-only file 缩写aof的方式 给操作进行备份 相当于mysql中的bin-log日志
消息发布与订阅
Session1发布如下Publish message1 hello
Session2 订阅如下Subscribe message
虚拟内存 2.6之后就弃用了
php-redis扩展安装方法
PHP 使用 Redis
安装
开始在 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP。 接下来让我们安装 PHP redis 驱动:下载地址为:https://github.com/phpredis/phpredis/releases。
PHP安装redis扩展
以下操作需要在下载的 phpredis 目录中完成:
$ wget https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz
$ cd phpredis-2.2.7 # 进入 phpredis 目录
$ /usr/local/php/bin/phpize # php安装后的路径
$ ./configure --with-php-config=/usr/local/php/bin/php-config
$ make && make install
如果你是 PHP7 版本,则需要下载指定分支:
git clone -b php7 https://github.com/phpredis/phpredis.git
修改php.ini文件
vi /usr/local/php/lib/php.ini
增加如下内容:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20090626"
extension=redis.so
安装完成后重启php-fpm 或 apache。查看phpinfo信息,就能看到redis扩展。
PHP 使用 Redis
连接到 redis 服务
<?php
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
//查看服务是否运行
echo "Server is running: " . $redis->ping();
?>
执行脚本,输出结果为:
Connection to server sucessfully
Server is running: PONG
Redis PHP String(字符串) 实例
<?php
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
//设置 redis 字符串数据
$redis->set("tutorial-name", "Redis tutorial");
// 获取存储的数据并输出
echo "Stored string in redis:: " . $redis->get("tutorial-name");
?>
执行脚本,输出结果为:
Connection to server sucessfully
Stored string in redis:: Redis tutorial
Redis PHP List(列表) 实例
<?php
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
//存储数据到列表中
$redis->lpush("tutorial-list", "Redis");
$redis->lpush("tutorial-list", "Mongodb");
$redis->lpush("tutorial-list", "Mysql");
// 获取存储的数据并输出
$arList = $redis->lrange("tutorial-list", 0 ,5);
echo "Stored string in redis";
print_r($arList);
?>
执行脚本,输出结果为:
Connection to server sucessfully
Stored string in redis
Redis
Mongodb
Mysql
Redis PHP Keys 实例
<?php
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
// 获取数据并输出
$arList = $redis->keys("*");
echo "Stored keys in redis:: ";
print_r($arList);
?>
执行脚本,输出结果为:
Connection to server sucessfully
Stored string in redis::
tutorial-name
tutorial-list
听雷哥浅谈Redis的更多相关文章
- $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )
$.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...
- Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...
- 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )
很多小伙伴没接触过Redis,以至于去学习的时候感觉云里雾里的,就有一种:教程随你出,懂了算我输的感觉. 每次听圈内人在谈论的时候总是插不上话,小编就偷偷去了解了一下,也算是初入门径. 然后就整理了一 ...
- 浅谈Redis面试热点之工程架构篇[1]
前言 前面用两篇文章大致介绍了Redis热点面试中的底层实现相关的问题,感兴趣的可以回顾一下:[决战西二旗]|Redis面试热点之底层实现篇[决战西二旗]|Redis面试热点之底层实现篇(续) 接下来 ...
- 浅谈Redis未授权访问漏洞
Redis未授权访问漏洞 Redis是一种key-value键值对的非关系型数据库 默认情况下绑定在127.0.0.1:6379,在没有进行采用相关的策略,如添加防火墙规则避免其他非信任来源ip访问等 ...
- 浅谈redis和memcached的区别
缓存技术方面说到redis大家必然会联想到memcached,了解它们的人应该都知道以下几点吧 redis与 memcached相比,redis支持key-value数据类型,同事支持list.set ...
- 浅谈Redis数据库的键值设计(转)
丰富的数据结构使得redis的设计非常的有趣.不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与.redis的DBA需要熟悉 ...
- 浅谈Redis及其安装配置
一.Redis的介绍 二.Redis的安装配置 三.Redis的配置文件说明 四.Redis的简单操作 简介: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型. ...
- 浅谈redis的HyperLogLog与布隆过滤器
首先,HyperLogLog与布隆过滤器都是针对大数据统计存储应用场景下的知名算法. HyperLogLog是在大数据的情况下关于数据基数的空间复杂度优化实现,布隆过滤器是在大数据情况下关于检索一个元 ...
随机推荐
- 用C#生成不反复的随机数
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/xiebaochun/article/details/28900237 对于随机数,大家都知道,计算机 ...
- delete在js里为引用删除
delete 运算符从对象中删除一个属性,或从数组中删除一个元素. delete expressionexpression 参数是一个有效的 JScript 表达式,通常是一个属性名或数组元素. 说明 ...
- HTML中什么时候加px
如:<img width="800" height="600" src="#"/> 不加后面的px; #center{ ...
- .NET中Ajax跨越访问
说明:我们知道Ajax是不能进行跨域请求的,我们是可以设置我们的项目让Ajax支持跨域访问. 跨域: aa.xxx.com 中用ajax请求 bb.ccc.com中的数据成为跨域. 找了一些文章看了 ...
- Progress
这个标签用来表示进度,常用来表示下载的进度. <progress value="22" max="100"></progress> ...
- sql字段为datetime,插入''的时候默认为1900年
Microsoft SQL Server Database Engine 用两个 4 字节的整数内部存储 datetime 数据类型的值. 第一个 4 字节存储“基础日期”(即 1900 年 1 月 ...
- socket手写一个简单的web服务端
直接进入正题吧,下面的代码都是我在pycharm中写好,再粘贴上来的 import socket server = socket.socket() server.bind(('127.0.0.1', ...
- 内存分配---FF、BF、WF三种算法
动态分区分配是根据进程的实际需要,动态的为之分配内存空间.而在实现可变分区分配时,将涉及到分区分配中 所用的数据结构.分区分配算法和分区的分配与内存回收的过程. 分区分配中的数据结构:(1)描述空闲块 ...
- QString, Std::string, char *相互转换
Qt 库中对字符串类型进行了封装,QString 类提供了所有字符串操作方法,给开发带来了便利. 由于第三方库的类型基本上都是标准的类型,即使用std::string或char *来表示字符 (串) ...
- Flask之endpoint错误View function mapping is overwriting an existing endpoint function: ***
最近在学习Flask, 其中遇到了一个错误, 发现这个问题和Flask, 路由有关系, 所以就记了下来 错误代码: from flask import Flask, render_template, ...