redis(1)

安装redis

wget http://download.redis.io/releases/redis-3.0.7.tar.gz

tar xzf redis-3.0.7.tar.gz

ln -s redis-3.0.7 redis

yum install gcc -y

make

##zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录

README

说的是关于分配器allocator, 如果有MALLOC  这个 环境变量, 会有用这个环境变量的 去建立redis。

而且libc 并不是默认的 分配器, 默认的是 jemalloc, 因为 jemalloc 被证明 有更少的 fragmentation problems 比libc。

但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加这么一个参数。

解决办法

make MALLOC=libc

make MALLOC=libc

make

make install

redis-cli -v

redis-server /root/redis/redis.conf & (从配置文件启动)

redis-cli -h 127.0.0.1 -p 6379

redis-cli -h 127.0.0.1 -p 6379 get hello    (直接得到命令的返回结果)

#停止redis服务

redis-cli shutdown

##redis关闭的过程:断开与客户端的连接、持久化文件生成

##kill -9 强制杀死redis服务,不但不会做持久化操作,还会造成缓存区资源不能被优雅关闭,极端情况会造成AOF和复制丢失数据的情况

##redis还有一个参数,代表是否在关闭redis前,生成持久化文件;

redis-cli shutdown nosave|save

redis有五种数据结构,他们是键值对中的值,对于键来说有一些通用的命令

1.查看所有键

keys *

2.键总数

dbsize

3.检查键是否存在

exists key

如果键存在返回1,不存在返回0

4.删除键

del keys

del是一个通用的命令,无论值是什么数据结构类型,del命令都可以将其删除。

5.键过期

expire key seconds

ttl命令会返回键的剩余过期时间,他有3种返回值;

大于等于0的整数:键剩余的过期时间

-1:键没设置过期时间

-2:键不存在

6.键的数据结构类型

type key

数据结构和内部编码:

type命令实际返回的就是当前值的数据结构类型,他们分别是:string(字符串)、hash、list(列表)、set(集合)、zset(有序集合)

实际上每种数据结构都有自己底层的内部编码实现,而且是多种实现,这样会在redis会在合适的场景选择合适的内部编码

可以通过object encoding命令查询编码:

object encoding hello

redis这样设计有两个好处:第一,可以改进内部编码,而对外的数据结构和命令没有影响,这样一旦开发出更优秀的内部编码,无需改动外部数据结构和命令。

第二,多种内部编码实现可以在不同场景下发挥各自的优势,例如ziplist比较节省内存,但是在列表元素比较多的情况下,性能会有所下降,这时候redis会根据配置选项将列表类型的内部实现转换为linkedlist.

单线程架构:

redis使用了单线程结构和I/O多路服用的模型来实现高性能的内存数据库服务

为什么单线程还能这么快?

通常来讲,单线程处理能力要比多线程差。

第一,纯内存访问;第二,非阻塞I/O;第三单线程避免了线程切换和竞态产生的消耗。

但是单线程会有一个问题:对于每隔命令的执行时间是有要求的。如果某个命令执行过长,会造成其他命令的阻塞,对于redis这种高性能的服务来说是致命的,所以redis是面向快速执行场景的数据库。

命令:

1、set key value [ex seconds] [px milliseconds] [nx|xx]  设置值

ex seconds:为键设置秒级过期时间

px milliseconds:为键设置毫秒级过期时间

nx:键必须不存在,才可以设置成功,用于添加

xx:与nx相反,键必须存在,才可以设置成功,用于更新

2、get key   获取值

如果要获取的键不存在,则返回nil(空)

3.批量设置值

mset key value [key value ...]

4.批量获取值

mget key [key ...]

5.计数

incr key

incr命令用于对值做自增操作,返回结果分为三种情况:

值是不是整数,返回错误

值是整数,返回自增后的结果

键不存在,按照值为0自增,返回结果为1

不常用命令

1.追加值

append key value

append可以向字符串尾部追价值

2.字符串长度

strlen key

3.设置并返回原值

getset key value

getset和set一样会设置值,但是不同的是,他同时会返回键原来的值

4.设置指定位置的字符

setrange key offeset value

5.获取部分字符串

getrange key start end

内部编码

字符串类型的内部编码有3种

int:8个字节的长整型

embstr:小宇等于39个字节的字符串

raw:大于39个字节的字符串

时间: 2024-12-10 23:53:03

redis(1)的相关文章

redis(一) 安装以及基本数据类型操作

redis(一) 安装以及基本数据类型操作 redis安装和使用 redis安装 wget http://download.redis.io/redis-stable.tar.gz tar zxvf redis-stable.tar.gz cd redis-stable.tar.gz make make install redis启动 redis-server redis关闭 redis-cli shutdown 配置 方法一 redis-server /path/to/redis.conf r

redis(二)高级用法

redis(二)高级用法 事务 redis的事务是一组命令的集合.事务同命令一样都是redis的最小执行单元,一个事务中的命令要么执行要么都不执行. 首先需要multi命令来开始事务,用exec命令来执行事务. 127.0.0.1:6379> multi OK 127.0.0.1:6379> hset user:1 name xiaoming QUEUED 127.0.0.1:6379> hset user:1 name daxiong QUEUED 127.0.0.1:6379>

windows下安装redis(转)

add by zhj: redis相比memcached相比,性能上并没有绝对的优势.我们用redis的是因为它支持更多的数据类型,而且在分配给redis的内存用满了之后, redis也不会删除没有过期的数据,而是按一定的算法把一些数据写到磁盘,从而为redis开辟出内存空间存储新数据.而memcached则是按一定的算法直接 删除未过期数据.reddis也可当消息队列,但我还不清楚它与传统消息队列ActiveMQ RabbitMQ ZeroMQ等相比,哪个更有优势.回头好好研究一下. 原文:h

.Net使用Redis详解之ServiceStack.Redis(七)

原文:.Net使用Redis详解之ServiceStack.Redis(七) 序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redis官方推荐的.NET驱动类库为Service.Stack.Redis.然而网上对这个类库的中文文档不是很全面与合理,这篇文章主要就对这个类库做注释展现.不足遗漏之处还望见谅,海涵. .Net使用Redis是非常方便与快捷与

Redis(五)、Redis数据库集群相关

Redis数据库集群 第1章 集群简介 Redis 集群是一个分布式(distributed).容错(fault-tolerant)的 Redis 实现, 集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset),是一个可以在多个 Redis 节点之间进行数据共享的设施(installation). Redis 集群中不存在中心(central)节点或者代理(proxy)节点, 集群的其中一个主要设计目标是达到线性可扩展性(linear scalability). Re

深入学习Redis(2):持久化

前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识--持久化.复制(及读写分离).哨兵.以及集群. 本文将先说明上述几种技术分别解决了Redis高可用的什么问题:然后详细介绍Redis的持久化技术,主要是RDB和AOF两种持久化方案:在介绍RDB和AOF方案时,不仅介绍其作用及操作方法,同时介绍持久化实现的一些原理细节及需要注意的问题.最后,介绍在实际使用中,持久化方案的选择,以及经常遇到的问题等. 原创不易,如果觉得文章对你有帮助,欢迎点赞.

Redis(八) LRU Cache

Redis(八)-- LRU Cache 在计算机中缓存可谓无所不在,无论还是应用还是操作系统中,为了性能都需要做缓存.然缓存必然与缓存算法息息相关,LRU就是其中之一.笔者在最先接触LRU是大学学习操作系统时的了解到的,至今已经非常模糊.在学习Redis时,又再次与其相遇,这里将这块内容好好梳理总结. LRU(Least Recently Used)是缓存算法家族的一员--最近最少使用算法,类似的算法还有FIFO(先进先出).LIFO(后进先出)等.因为缓存的选择一般都是用内存(RAM)或者计

学习Redis(二)

自关系型DB诞生40年来,从理论产生到现实产品(MySQL.Oracle),已在DB领域上升到了霸主地位,每年数百亿$的庞大产业市场: 随着web2.0的兴起,对于规模日益庞大的海量数据,传统的关系型DB显得力不从心,如超大规模和高并发的微博.微信.SNS(socail network site,socail network services)纯动态网站等,关系型DB面临很多难以克服的问题,有IO瓶颈.性能瓶颈都难以有效突破,于是出现了很多针对特定场景,以高性能和使用便利为目的的差异化的DB产品

细说Redis(一)之 Redis的数据结构与应用场景

原文:细说Redis(一)之 Redis的数据结构与应用场景 这一篇文章主要介绍Redis的数据结构与应用场景 NOSQL之Redis Redis是一款由key-value存储的软件.说起NOSQL,有文档型.键值型.列型存储.图形数据库.其中,在简单的读写性能来说,键值型是最快的. Redis作为目前市面上使用最多的键值型数据存储软件,内置了多种类型的数据结构,并且提供了高可用解决方案,使用方便快捷.市面上有很多语言的库可以调用Redis服务器. Redis的数据结构类型 Redis有很多种数

细说Redis(二)之 Redis的持久化

原文:细说Redis(二)之 Redis的持久化 前言 在上一篇文章[细说Redis(一)之 Redis的数据结构与应用场景]中,主要介绍了Reids的数据结构. 对于redis的执行命令,这里不做介绍,因为网上搜索一堆,无必要再做介绍. AOF&RDB Redis的有两种持久化,分别是AOF.RDB. AOF是文件增量存储.RDB是文件快照.AOF是存储的是redis的每个步骤增删改的命令. 区别 在Redis内部机制来说,RDB模式首先产生一个子进程,调用fork().然后用子线程写到一个临