redis学习笔记之redis简介
redis简介
Redis是一个开源的,高性能的,基于键值对的缓存与存储系统,通过设置各种键值数据类型来适应不同场景下的缓存与存储需求。同事redis的诸多高层级功能使其可以胜任消息队列,任务队列等不同角色。
存储结构
Redis是REmote Dictionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容,目前为止redis支持的键值数据类型如下:字符串类型,散列类型,列表类型,集合类型,和有序集合类型。其中一个字符串类型键值允许存储的数据最大容量为521M.
内存存储与持久化
Redis数据库中的所有数据都存储在内存中。在一台普通的笔记本电脑上,Redis可以在一秒内读写超过10万个键值。
数据存储在内存也有问题比如断电。redis还提供了持久化的存储,既可以将内存的数据异步写入应哦按,同时不影响继续
提供服务。
功能丰富
Redis可以为每个键设置生存时间,生存时间到后期会自动删除,这一功能可以利用redis作为缓存系统来调用。
除此之外,redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以容易地实现一个高性能的优先级队列,同时在更高层上,redis还支持"发布/订阅"的消息模式,可以基于此构建聊天室。
redis的安装
参考 -----
redis命令行客户端
通过redis-cli向redis发送命令,
通过-h和-p自定义地址和端口号
$redis-cli -h 127.0.0.1 -p 6379
通过ping命令测试连接是否正常
$redis-cli PING
####状态回复
PONG
####错误回复
如果上述命令不存在或者存在格式错误,会返回以error开头的错误。如
reids>ERRORCOMMEND
输出
(error)ERR unknow command 'ERRORCOMMEND'
获取先输入redis-cli进入交互模式,然后自由输入命令,例如PING.
整数回复
返回递增后的键值,类似mysql最后的索引值
依次执行以下命令
redis-cli
127.0.0.1:6379> set foot bar
OK
127.0.0.1:6379> INCR foo
(integer) 1
127.0.0.1:6379> set foot bar
OK
127.0.0.1:6379> INCR foo
(integer) 2
可以看到每次插入一条数据返回值都跟着变化。
字符串回复
127.0.0.1:6379> set foot bar
OK
127.0.0.1:6379> get foo
"bar"
127.0.0.1:6379> set foo banana
OK
127.0.0.1:6379> get foo
"banana"
127.0.0.1:6379>
可以看到get命令可以获取foo的最新的键值。
字符串多行回复
127.0.0.1:6379> KEYS *
1) "proxies"
2) "foo"
3) "foot"
返回键名1是我之前执行的,3是之前foo打错了执行的。keys命令需要便利redis中的所有键,当键的数量较多时会影响性能,不建议生产环境中使用。
多行数据库
redis提供了多个来存储数据的字典,每个字典类型mysql的数据量,每个数据库对外都是以0开始递增,redis默认支持16个数据库,客户端连接到服务端时,redis默认使用0进行操作数据库,使用select可以根据数据库。比如选择1号数据库:
redis-cli
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get foo
(nil)
127.0.0.1:6379[1]>
redis不支持自定义数据库的名字,每个数据库必须以编号命名。比如可以使用0号数据库存储某个应用生产环境的数据,1号数据库存储测试环境中的数据,需要注意的是不同的应用应该使用不同的redis实例redis也不支持为每个数据库设置不同的访问密码。
最重要的是redis实例中所有数据库的数据并不是完全隔离的,比如FLUSHALL可以清空一个redis实例中所有数据库中的数据。。由于redis非常轻量级,一个空的redis实例占用内存只有1MD左右,所以不用担心多个redis实例会额外占用很多内存。
几个基础命令
1.keys 见上面的例子
2.判断一个键是否存在
exists key 如果存在返回1 ,不存在返回0
0.0.1:6379> exists foo
(integer) 1
127.0.0.1:6379> exists foo2
(integer) 0
127.0.0.1:6379> exists foot
(integer) 1
127.0.0.1:6379>
3.删除键
del key [key ...]
可以删除一个或者多个空格间隔,返回值是删除的个数。del命令不支持通配符。
127.0.0.1:6379> set f1 1
OK
127.0.0.1:6379> set f3 1
OK
127.0.0.1:6379> set f2 1
OK
127.0.0.1:6379> keys *
1) "key"
2) "f1"
3) "proxies"
4) "f2"
5) "foot"
6) "foo"
7) "f3"
127.0.0.1:6379> del f1
(integer) 1
127.0.0.1:6379> del f2 f3
(integer) 2
127.0.0.1:6379>
3.获取键值的数据类型
type key
type命令用来获取键值类型,返回值可能是string,hash,list,set,zset(有序集合)。
127.0.0.1:6379> set test 1
OK
127.0.0.1:6379> type test
string
127.0.0.1:6379> lpush test2 2
(integer) 1
127.0.0.1:6379> type test2
list
127.0.0.1:6379>
lpush命令是向指定的列表类型键中增加一个元素,如果不存在则创建。后面详解。
读取键值
get key
根据键获取其值。
127.0.0.1:6379> get fo
(nil)
127.0.0.1:6379> get foo
"banana"
127.0.0.1:6379>
不存在的时候返回nil.
递增数字
INCR key
增加指定的整数
INCRBY key increment
incrby和incr命令效果差不多,区别是incrby可以指定增加的数字
127.0.0.1:6379> incrby bar 2
(integer) 2
127.0.0.1:6379> incrby bar 5
(integer) 7
127.0.0.1:6379> incr bar
(integer) 8
127.0.0.1:6379> incr bar
(integer) 9
127.0.0.1:6379>
增加指定的浮点数
incrbyfloat key inrement
这个命令类似上面两个只不过是可以传递一个浮点数而已
127.0.0.1:6379> incrbyfloat bar 3.14
"12.140000000000001"
127.0.0.1:6379> incrbyfloat bar 3.14e+9
"3140000012.1399999"
127.0.0.1:6379>
减少指定的整数
有增加就有减少
decr和decrby和增加的用法一样,只不过是键值递减。
decrby key 4相当于incrbu key -4
向尾部追加值
向键值的末尾加字符串,如果不存在就是相当于set key value
127.0.0.1:6379> append bar "345"
(integer) 21
127.0.0.1:6379> get bar
"3140000012.1399999345"
127.0.0.1:6379>
127.0.0.1:6379> append asd "hello dj"
(integer) 8
127.0.0.1:6379> get asd
"hello dj"
127.0.0.1:6379>
获取字符串长度
STRLEN key
返回键值长度,不存在返回0.
127.0.0.1:6379> set key "ᄎᆭ"
OK
127.0.0.1:6379> strlen key
(integer) 4
127.0.0.1:6379> set key "ᅣ ̄채"
OK
127.0.0.1:6379> strlen key
(integer) 4
127.0.0.1:6379>
同时设置多个键值
Mget key/mset key value
mget/mset和get/set相似,前者可以获取/设置多个值。
(integer) 4
127.0.0.1:6379> mget bar foo
1) "3140000012.1399999345"
2) "banana"
127.0.0.1:6379> mset a 1 b 2
OK
127.0.0.1:6379>
位操作
getbit key offset
setbit key offset value
bitcount key [start][end]
bitop operation destkey key [key ....]
一个字节由8个二进制位组成,redis提供了以上四个命令可以直接对二进制进行操作。
redis学习笔记之redis简介的更多相关文章
- Redis学习笔记之Redis单机,伪集群,Sentinel主从复制的安装和配置
0x00 Redis简介 Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure server). Redis的键值 ...
- Redis学习笔记(4) Redis事务、生存时间及排序
1. Redis事务 Redis中的事务(transaction)是一组命令的集合,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次 ...
- Redis学习笔记(1) Redis介绍及基础
1. Redis的特性 (1) 存储结构 Redis(Remote Dictionary Server,远程字典服务器)是以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容.Redis支 ...
- StackExchange.Redis学习笔记(一) Redis的使用初探
Redis Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化. 与其它键值数据存储相比,Redis有一组相对丰富的数据类型. Redis可以将数据复制到任意数量的从机中 Redis的安装 官 ...
- redis学习笔记(三)——redis的命令大全总结
总结了一些redis五种存储类型的常用命令以及一些通用操作命令,不是很全,是在学习的时候将学到的做了个汇总,使用的时候可以查一下. 笔记写在表格里面了,不好粘贴.......后面的直接截图了..... ...
- Redis学习笔记(3) Redis基础类型及命令之二
1. 集合类型 集合类型与列表类型有很多相似之处,但二者的区别在于:前者具有唯一性,但不具有有序性:后者具有有序性,但不具有唯一性.集合类型的常用操作是向集合中加入或删除元素.判断某个元素是否存在等, ...
- Redis学习笔记~StackExchange.Redis实现分布式Session
回到目录 对于多WEB的环境现在已经是必须的了,很难想像一台WEB服务器面对百万并发的响应,所以,我们需要多台WEB服务器集群合作,来缓解这种高并发,高吞吐的场景,而对于多WEB的场景又会有个问题出现 ...
- Redis学习笔记(2) Redis基础类型及命令之一
1. 基础命令 (1) 获取符合规则的键名列表 格式为:KEYS pattern 其中pattern表示支持通配符 # 建立一个名为bar的键 > SET bar OK # 获取Redis所有键 ...
- Redis学习笔记之Redis基本数据结构
Redis基础数据结构 Redis有5种基本数据结构:String(字符串).list(列表).set(集合).hash(哈希).zset(有序集合) 字符串string 字符串类型是Redis的va ...
随机推荐
- 【BZOJ2961】共点圆(CDQ分治)
[BZOJ2961]共点圆(CDQ分治) 题面 BZOJ 题解 设询问点\((x,y)\),圆心是\((X,Y)\) 那么如果点在园内的话就需要满足 \((X-x)^2+(Y-y)^2\le X^2+ ...
- 【BZOJ4205】卡牌配对
Description 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值使得两张卡牌该项属性值互质,且 ...
- Linux内核分析实验五
一.给MenuOS增加time和time-asm命令 1. 克隆并自动编译MenuOS rm menu -rf 强制删除原menu文件 git clone http: cd menumake root ...
- Python OS模块操作文件和目录
#-*-coding:utf-8-*- import os import shutil ###############OS模块############## #获得当前python脚本的工作目录 os. ...
- Java类编译、加载、和执行机制
Java类编译.加载.和执行机制 标签: java 类加载 类编译 类执行 机制 0.前言 个人认为,对于JVM的理解,主要是两大方面内容: Java类的编译.加载和执行. JVM的内存管理和垃圾回收 ...
- 利用signapk.jar工具对apk文件进行签名
signapk.jar是Android源码包中的一个签名工具. 代码位于:Android源码目录下,signapk.jar 可以编译build/tools/signapk/ 得到. 使用signapk ...
- Centos6.7在VMware7.0上的hgfs文件共享
站在各大巨人的肩膀上.总结如下: 1,设置虚拟机共享 虚拟机->setting->options->Shared Folders->Always Enable mount -t ...
- 静态常量整数成员在class内部直接初始化
#include <vector> #include <deque> #include <algorithm> #include <iostream> ...
- Linux最大文件句柄(文件描述符)限制和修改
转自:http://jameswxx.iteye.com/blog/2096461 写这个文章是为了以正视听,网上的文章人云亦云到简直令人发指.到底最大文件数被什么限制了?too many open ...
- CSS之float样式
一.简介 Css样式的float浮动属性,用于设置标签对象(如:<div>标签盒子.<span>标签.<a>标签.<em>标签等html标签)的浮动布局 ...