Redis 实践笔记1---基础知识

前言

由于Redis的广泛使用,加上在项目中涉及到Redis,因此会根据自己的使用和学习,写一个Redis系列的博客,作为自己的笔记,同时也分享给大家。


What is Redis ?


看一下Redis的官网http://redis.io/对REDIS的描述:

Redis is an open source, BSD licensed, advanced key-value cache and store. It is often referred to as a data structure server since keys can contain stringshasheslistssets,sorted setsbitmaps and hyperloglogs.


关键词:

Redis,开源KEY/VALUE缓存系统,数据结构服务器,数据类型。



install it and start it!


安装redis,没有什么特殊之处,启动也很简单。

如果解压之后,没有configure进行安装选项的指定,直接make && makeinstall进行安装的话,默认REDIS会安装至/usr/local/bin下。

命令说明
./redis-server ./redis.conf我们可以把安装路径下的redis.conf拷贝至启动命令路径下。用于启动REDIS。

./redis-cli

./redis-cli shutdown

REDIS客户端,可以连接和关闭redis。
./redis-benchmarkREDIS性能测试。


启动后,观察端口占用情况:

1
2
3
4
[root@master bin]# ./redis-server ./redis.conf
[root@master bin]# netstat -tnlp | grep redis
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      4508/redis-server 
tcp        0      0 :::6379                     :::*                        LISTEN      4508/redis-server *


REDIS的默认启动端口就是 6379。

1
2
3
4
5
6
7
[root@master bin]# ./redis-cli 
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> set name zhangfengzhe
OK
127.0.0.1:6379> get name
"zhangfengzhe"


Redis.conf


可以浏览下Redis的配置文件,下面是一些入门配置选项。


配置说明
daemonize yes启动redis是否以后台的方式启动。默认是no,那么一个XSHELL客户端启动REDIS后会阻塞,因此可以将配置改为yes.
port 6379启动端口。
bind 192.168.1.100REDIS的安全特性,可以允许指定IP客户端才能访问REDIS SERVER!
logfile "/usr/local/bin/resin.runlog"指定REDIS的运行日志
databases 16REDIS的数据是存储在内存中的,但是也是可以持久化到数据库中,并且REDIS将数据库的个数默认设置为16个,默认情况下是数据库0在使用,我们可以使用select进行切换。
save 900 1REDIS将内存中的数据保存至数据库的策略。左边示例就是说,900S内有一个KEY发生变化,那么STORE至DB。支持多SAVE的策略。
dbfilename dump.rdb
dir ./
数据库文件名称及存储路径
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
REDIS的AOF机制:是否记录操作REDIS的每一个操作至AOF文件中。




数据类型


相比Memcached只支持String类型的KEY/VALUE而言,Redis的数据类型很丰富,比如:String/List/Set/Sorted Set/Hash等。Redis所支持的类型很多,每一种类型的命令也不少,那么我们如何记忆,学习,使用呢?

我的想法:理解REDIS每一种数据类型的特点 + 官方命令手册

在http://redisdoc.com/ 有REDIS的每一个数据类型的命令列表,以及命令的使用方法说明。

数据类型说明以及一些命令
String

字符串类型,也可以存储数字,以及任何可以序列化的数据,REDIS最大上限是1GB,远远大于MEMCACHED的限制。


set/setnx/get/getset/mget/mset/msetnx/   

【结尾是nx标示如果存在这个KEY才操作,m开头的标示批量操作】


incr/incrby/decr/decrby

【数字的原子性的增减】


append/substr/strlen

【追加、截取、长度】

 

List

本质上LIST的每一元素是STRING类型,并且LIST就是一个双向链表!

可以堆栈,即先进后出;可以队列,即先进先出。


lpush/rpush/lpop/rpop/blpop/brpop

【b开头的标示是此命令的阻塞版本,虽然阻塞但是避免了轮询。】


linsert 可以方便LIST进行非头尾的插入操作


lrange/ltrim/lset/lrem

【注意0代表第一个元素,-1代表最后一个元素】


LIST没有命令可以直接查询是否包含这个STRING!

LIST中元素是有序的,提供了lindex key index来返回下标为index的元素


Set

Set是String类型的无序集合,和JAVA的Set<String>特点一致。


sadd/smembers/sinter/sinterstore/sunion/sunionstore/sdiff/sdiffstore

【以store结尾的标示此命令的结果存储至另一个SET集合中】


Set的最大特点是支持集合之间的交,并,差运算。

【这些操作很利于实现SNS需要的好友推荐,BLOG的TAG功能等】


Set还提供SISMEMBER命令来查询SET集合是否包含这个KEY!这是LIST所不能的!

由于Set的无序性,导致取出一个元素只能利用spop/srandmember随机取出!而sorted set解决了这一问题。



Sorted Set

Sorted Set的中的元素是String类型的,但是每一个String元素关联了一个SCORE(权重,优先级),元素根据SCORE来进行排序。


zset需要注意的是,有一个排名,即rank;一个是分数,即score.


Hash

一个String类型的FILED/VALUE的映射表。

Hash特别适合存储对象,占用更少的内存,而且可以很方便的存取整个对象。


hset/hmset/hget/hmget/hkeys/hvals/hgetall/hlen/hdel/hexists...



KEY

exists key
0 or 1 
del key
type key
none/string/list/set/...
keys pattern符合pattern的所有KEY
expire key seconds设置KEY的过期时间



本文转自zfz_linux_boy 51CTO博客,原文链接:http://blog.51cto.com/zhangfengzhe/1656888,如需转载请自行联系原作者


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/256705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[操作系统实验lab4]实验报告

实验概况 在开始实验之前&#xff0c;先对实验整体有个大概的了解&#xff0c;这样能让我们更好地进行实验。 我们本次实验需要补充的内容包括一整套以sys开头的系统调用函数&#xff0c;其中包括了进程间通信需要的一些系统调用如sys_ipc_can_recv等&#xff0c;以及补充完成f…

设计模式C++实践

1、单例模式 1&#xff09;饿汉士单例模式 2&#xff09;懒汉士单例模式

js中怎么写自执行函数

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title></title> <script type"text/javascript"> /** * Window 是一个非常重要的对象 */ c…

最优化课堂笔记06-无约束多维非线性规划方法(含重点)

引言 6.1 坐标轮换法&#xff08;工程上基本不用&#xff0c;效率低不适用高维&#xff09; 6.1例子&#xff1a;主要是对最优步长alpha的确定 6.2 最速下降法&#xff08;相邻两次的搜索方向互相垂直&#xff09; 6.2例子 求解法一 注&#xff1a;最速下降法与坐标轮换法的区…

WINHEX的比较、同步功能加上NTFS对稀疏文件的支持

[原创]如何快速地分析RAID信息在每块盘上的记录方式&#xff0c;如何快速地确定系统的实质读写操作。WINHEX是一个非常好的软件&#xff0c;通过其比较和同步功能加上NTFS对稀疏文件的支持&#xff0c;看看怎么实现上述设想。。。我们会有这样的需求&#xff1a;在RAID上的几块…

Z表数据EXCEL导入

很多项目都有这种需求&#xff0c;虽然别人用的各有不同&#xff0c;不过闲来无事&#xff0c;还是自己搞了一个出来。基于EXCEL的导入。 *&---------------------------------------------------------------------* *& Report ZLY_UPLOAD_TABLE *& *&------…

运动轨迹规划算法专栏

1、全局局部路径规划&#xff0c;解决低速简单障碍物环境的路径规划功能

现代制造工程课堂笔记06-集成电路制造工程

中国主要是进行了集成电路的下游环节&#xff0c;即是封装与测试

悖论:早期互联网项目,是否需要技术含量?

在自己创业、看别人创业、和别人一起创业的过程中&#xff0c;一直有个“悖论”困惑着我&#xff0c;让我很不舒服。因为如鲠在喉&#xff0c;所以不吐不快。悖论 早期互联网项目&#xff0c;通常来说&#xff0c;技术难度不算大&#xff1f; 从创业者角度来讲&#xff0c;最…

资源打包后项目中的文件

一.资源打包Assets.car1.如果部署版本>8.0,并且图片被放入到Images.xcassets,图片打包之后会被放到Assets.car,并且是有对图片资源进行压缩.2.如果部署版本<8.0,并且图片被放入到Images.xcassets,图片会被放到MainBundle里面,并且不会对图片进行压缩处理.3.如果图片是直接…

现代制造工程-考试复习02

1.说明&#xff1a;标有重点的是会出简答题或者计算题&#xff0c;而未标注的则是会出选择题和填空题 2.题型&#xff1a;判断、选择、简答、论述

VINS状态估计篇-视觉sfm初始化

1、通过判断当前帧和滑动窗口中&#xff0c;平均视差>30

TP_字母函数

1. A() A函数用于实例化控制器 格式&#xff1a;[资源://][模块/]控制器 A($name,$layer,$level) param string $name 资源地址 param string $layer 控制层名称 param integer $level 控制器层次 return Controller|false 2. B() 执行某个行为 B($name,$tag,&$paramsNULL)…

父div高度和宽度的应用

这是我自己在仿腾讯首页时遇到的布局问题&#xff0c;在此记录&#xff0c;如果有错&#xff0c;欢迎指正。 首先是对齐问题&#xff0c;可以把父div的高度设置为0&#xff0c;然后调整padding值&#xff0c;这样可以批量调整子div们和其他父div的相对高度。 这是父div的样式 .…

flume package遇到的问题

flume打包遇到的一些问题 1.ipc兼容性问题&#xff0c;线上使用2.3.0的hdfs&#xff0c;但是打包时默认为1.2.1的 123408 Apr 2015 19:38:25,122 WARN [SinkRunner-PollingRunner-DefaultSinkProcessor] (org.apache.flume.sink.hdfs.HDFSEventSink.process:455) - HDFS IO e…

有限元笔记06-三维实体单元

多个四面体单元组合起来可以形成六面体

python读取excle表格数据,将数据编辑到图像上工程

这里写目录标题一级目录&#xff1a;python读取excel表格内容二级目录&#xff1a;python如何分割字符串三级目录&#xff1a;python如何在图像的相应位置编辑文字或者字母、数字一级目录&#xff1a;python读取excel表格内容 二级目录&#xff1a;python如何分割字符串 三级…

暑假计划

保研的事还是要听天由命。日常拜锦鲤大王。 生产实习呢....估计也是要水过去。等尘埃落定后再补补这些项目吧。 字符串&#xff1a; 1.后缀数组专题&#xff08;知乎专栏&#xff09; 2.熟练AC自动机 dp&#xff1a; 3.状压dp轮廓线dp入门 4.数位dp 数学&#xff1a; 5.FFT容斥…

使用junit测试用例

通常只会使用junit测试非main方法&#xff0c;在我眼里就是程序入口实现而已。今天&#xff0c;发现原来可以测试类。 针对mybatis练习。在需要测试的UserDaoImpl类上右键&#xff0c;新建一个junit case,位置可以放到新创建的source folder :test里面。 选择需要测试的方法&am…

H5页面适配所有iPhone和安卓机型的六个技巧

1、viewport 简单粗暴的方式&#xff1a; <meta name"viewport" content"width320,maximum-scale1.3,user-scalableno"> 直接设置viewport为320px的1.3倍&#xff0c;将页面放大1.3倍。 为什么是1.3&#xff1f; 目前大部分页面都是以320px为基准的布…