redis缓存的安装和使用

转载自:http://www.open-open.com/lib/view/open1384091914836.html

Redis介绍
    Redis本质上一个Key/Value数据库,与Memcached类似的NoSQL型数据库,但是他的数据可以持久化的保存在磁盘上,解决了服务重启后数据不丢失的问题,他的值可以是string(字符串)、list(列表)、sets(集合)或者是ordered  sets(被排序的集合),所有的数据类型都具有push/pop、add/remove、执行服务端的并集、交集、两个sets集中的差别等等操作,这些操作都是具有原子性的,Redis还支持各种不同的排序能力
    Redis 2.0更是增加了很多新特性,如:提升了性能、增加了新的数据类型、更少的利用内存(AOF和VM)
    Redis支持绝大部分主流的开发语言,如:C、Java、C#、PHP、Perl、Python、Lua、Erlang、Ruby等等
    官网:http://code.google.com/p/redis/

Redis性能
    根据Redis官方的测试结果:在50个并发的情况下请求10w次,写的速度是110000次/s,读的速度是81000次/s
地址:http://code.google.com/p/redis/wiki/Benchmarks

一、安装过程:
最新稳定版,Redis 2.0.4 stable
wget http://redis.googlecode.com/files/redis-2.6.7.tar.gz (其他版本到官网下载即可)
tar zxf redis-2.6.7.tar.gz
cd redis-2.6.7
与其它软件不同的是,不需要configure。
make
装完了。

创建一个目录
mkdir /usr/local/redis2
cd src
cp redis-server redis-benchmark redis-cli ../redis.conf /usr/local/redis2

二、启动与停止:

cd /usr/local/redis2

启动 ./redis-server > /dev/null & 或者 ./redis-server redis.conf 或者 ./redis-server redis.conf 1>log.log 2>errlog.log (1为标准输出,2为错误输出)

停止 ./redis-cli shutdown

客户端连接 ./redis-cli

三、测试:

存值:
./redis-cli set hx value
取值:
./redis-cli get hx

> quit
退出连接

> dbsize
(integer) 12

当前数据库中key的数量

> info
服务器基本信息

monitor

实时转储收到的请求

config get
获取服务器的参数配置

flushdb
清空当前数据库

flushall
清除所有数据库

四、附注

redis.conf配置文件:
引用
#是否作为守护进程运行
daemonize yes
#配置pid的存放路径及文件名,默认为当前路径下
pidfile redis.pid
#Redis默认监听端口
port 6379
#客户端闲置多少秒后,断开连接
timeout 300
#日志显示级别
loglevel verbose
#指定日志输出的文件名,也可指定到标准输出端口
logfile stdout
#设置数据库的数量,默认连接的数据库是0,可以通过select N来连接不同的数据库
databases 16
#保存数据到disk的策略
#当有一条Keys数据被改变是,900秒刷新到disk一次
save 900 1
#当有10条Keys数据被改变时,300秒刷新到disk一次
save 300 10
#当有1w条keys数据被改变时,60秒刷新到disk一次
save 60 10000
#当dump  .rdb数据库的时候是否压缩数据对象
rdbcompression yes
#dump数据库的数据保存的文件名
dbfilename dump.rdb
#Redis的工作目录
dir /home/falcon/redis-2.0.0/
###########  Replication #####################
#Redis的复制配置
# slaveof <masterip> <masterport>
# masterauth <master-password>

############## SECURITY ###########
# requirepass foobared

############### LIMITS ##############
#最大客户端连接数
# maxclients 128
#最大内存使用率
# maxmemory <bytes>

########## APPEND ONLY MODE #########
#是否开启日志功能
appendonly no
# 刷新日志到disk的规则
# appendfsync always
appendfsync everysec
# appendfsync no
################ VIRTUAL MEMORY ###########
#是否开启VM功能
vm-enabled no
# vm-enabled yes
vm-swap-file logs/redis.swap
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
############# ADVANCED CONFIG ###############
glueoutputbuf yes
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
#是否重置Hash表
activerehashing yes

五、redis所有常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
常规操作命令
  
01  exits key              //测试指定key是否存在,返回1表示存在,0不存在
02  del key1 key2 ....keyN //删除给定key,返回删除key的数目,0表示给定key都不存在
03  type key               //返回给定key的value类型。返回 none 表示不存在key,string字符类型,list 链表类型 set 无序集合类型...
04  keys pattern           //返回匹配指定模式的所有key,下面给个例子
05  randomkey              //返回从当前数据库中随机选择的一个key,如果当前数据库是空的,返回空串
06  rename oldkey newkey   //原子的重命名一个key,如果newkey存在,将会被覆盖,返回1表示成功,0失败。可能是oldkey不存在或者和newkey相同
07  renamenx oldkey newkey //同上,但是如果newkey存在返回失败
08  dbsize                 //返回当前数据库的key数量
09  expire key seconds     //为key指定过期时间,单位是秒。返回1成功,0表示key已经设置过过期时间或者不存在
10  ttl key                //返回设置过过期时间的key的剩余过期秒数 -1表示key不存在或者没有设置过过期时间
11  select db-index        //通过索引选择数据库,默认连接的数据库所有是0,默认数据库数是16个。返回1表示成功,0失败
12  move key db-index      //将key从当前数据库移动到指定数据库。返回1成功。0 如果key不存在,或者已经在指定数据库中
13  flushdb                //删除当前数据库中所有key,此方法不会失败。慎用
14  flushall               //删除所有数据库中的所有key,此方法不会失败。更加慎用
string 类型数据操作命令
  
01  set key value         //设置key对应的值为string类型的value,返回1表示成功,0失败
02  setnx key value       //同上,如果key已经存在,返回0 。nx 是not exist的意思
03  get key               //获取key对应的string值,如果key不存在返回nil
04  getset key value      //原子的设置key的值,并返回key的旧值。如果key不存在返回nil
05  mget key1 key2 ... keyN            //一次获取多个key的值,如果对应key不存在,则对应返回nil。下面是个实验,首先清空当前数据库,然后设置k1,k2.获取时k3对应返回nil
06  mset key1 value1 ... keyN valueN   //一次设置多个key的值,成功返回1表示所有的值都设置了,失败返回0表示没有任何值被设置
07  msetnx key1 value1 ... keyN valueN //同上,但是不会覆盖已经存在的key
08  incr key              //对key的值做加加操作,并返回新的值。注意incr一个不是int的value会返回错误,incr一个不存在的key,则设置key为1
09  decr key              //同上,但是做的是减减操作,decr一个不存在key,则设置key为-1
10  incrby key integer    //同incr,加指定值 ,key不存在时候会设置key,并认为原来的value是 0
11  decrby key integer    //同decr,减指定值。decrby完全是为了可读性,我们完全可以通过incrby一个负值来实现同样效果,反之一样。
12  append key value      //给指定key的字符串值追加value,返回新字符串值的长度。下面给个例子
13  substr key start end  //返回截取过的key的字符串值,注意并不修改key的值。下标是从0开始的,接着上面例子
list 类型数据操作命令
  
01  lpush key string          //在key对应list的头部添加字符串元素,返回1表示成功,0表示key存在且不是list类型
02  rpush key string          //同上,在尾部添加
03  llen key                  //返回key对应list的长度,key不存在返回0,如果key对应类型不是list返回错误
04  lrange key start end      //返回指定区间内的元素,下标从0开始,负值表示从后面计算,-1表示倒数第一个元素 ,key不存在返回空列表
05  ltrim key start end       //截取list,保留指定区间内元素,成功返回1,key不存在返回错误
06  lset key index value      //设置list中指定下标的元素值,成功返回1,key或者下标不存在返回错误
07  lrem key count value      //从key对应list中删除count个和value相同的元素。count为0时候删除全部
08  lpop key                  //从list的头部删除元素,并返回删除元素。如果key对应list不存在或者是空返回nil,如果key对应值不是list返回错误
09  rpop                      //同上,但是从尾部删除
10  blpop key1...keyN timeout //从左到右扫描返回对第一个非空list进行lpop操作并返回,比如blpop list1 list2 list3 0 ,如果list不存在list2,list3都是非空则对list2做lpop并返回从list2中删除的元素。如果所有的list都是空或不存在,则会阻塞timeout秒,timeout为0表示一直阻塞。当阻塞时,如果有client对key1...keyN中的任意key进行push操作,则第一在这个key上被阻塞的client会立即返回。如果超时发生,则返回nil。有点像unix的select或者poll
11  brpop                     //同blpop,一个是从头部删除一个是从尾部删除
12  rpoplpush srckey destkey  //从srckey对应list的尾部移除元素并添加到destkey对应list的头部,最后返回被移除的元素值,整个操作是原子的.如果srckey是空或者不存在返回nil
set 类型数据操作命令
  
01  sadd key member                //添加一个string元素到,key对应的set集合中,成功返回1,如果元素以及在集合中返回0,key对应的set不存在返回错误
02  srem key member                //从key对应set中移除给定元素,成功返回1,如果member在集合中不存在或者key不存在返回0,如果key对应的不是set类型的值返回错误
03  spop key                       //删除并返回key对应set中随机的一个元素,如果set是空或者key不存在返回nil
04  srandmember key                //同spop,随机取set中的一个元素,但是不删除元素
05  smove srckey dstkey member     //从srckey对应set中移除member并添加到dstkey对应set中,整个操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key不是set类型返回错误
06  scard key                      //返回set的元素个数,如果set是空或者key不存在返回0
07  sismember key member           //判断member是否在set中,存在返回1,0表示不存在或者key不存在
08  sinter key1 key2...keyN        //返回所有给定key的交集
09  sinterstore dstkey key1...keyN //同sinter,但是会同时将交集存到dstkey下
10  sunion key1 key2...keyN        //返回所有给定key的并集
11  sunionstore dstkey key1...keyN //同sunion,并同时保存并集到dstkey下
12  sdiff key1 key2...keyN         //返回所有给定key的差集
13  sdiffstore dstkey key1...keyN  //同sdiff,并同时保存差集到dstkey下
14  smembers key                   //返回key对应set的所有元素,结果是无序的
sorted set 类型数据操作命令
  
01  zadd key score member        //添加元素到集合,元素在集合中存在则更新对应score
02  zrem key member              //删除指定元素,1表示成功,如果元素不存在返回0
03  zincrby key incr member      //增加对应member的score值,然后移动元素并保持skip list保持有序。返回更新后的score值
04  zrank key member             //返回指定元素在集合中的排名(下标),集合中元素是按score从小到大排序的
05  zrevrank key member          //同上,但是集合中元素是按score从大到小排序
06  zrange key start end         //类似lrange操作从集合中去指定区间的元素。返回的是有序结果
07  zrevrange key start end      //同上,返回结果是按score逆序的
08  zrangebyscore key min max    //返回集合中score在给定区间的元素
09  zcount key min max           //返回集合中score在给定区间的数量
10  zcard key                    //返回集合中元素个数
11  zscore key element           //返回给定元素对应的score
12  zremrangebyrank key min max  //删除集合中排名在给定区间的元素
13  zremrangebyscore key min max //删除集合中score在给定区间的元素
hash 类型数据操作命令
  
01  hset key field value       //设置hash field为指定值,如果key不存在,则先创建
02  hget key field             //获取指定的hash field
03  hmget key filed1....fieldN //获取全部指定的hash filed
04  hmset key filed1 value1 ... filedN valueN //同时设置hash的多个field
05  hincrby key field integer  //将指定的hash filed 加上给定值
06  hexists key field          //测试指定field是否存在
07  hdel key field             //删除指定的hash field
08  hlen key                   //返回指定hash的field数量
09  hkeys key                  //返回hash的所有field
10  hvals key                  //返回hash的所有value
11  hgetall                    //返回hash的所有filed和value

六、spring中整合redis
看了java Clients,redis官网比较推荐Jedis,而spring对redis的客服端做了一个统一封装,支持(Jedis,  JRedis, and RJC),这里对说下SPRING DATA - REDIS。

1、使用maven的话那就很简单了,直接加入依赖。

2、编辑pom.xml

1
2
3
4
5
6
7
8
9
10
11
<repository> 
 <id>spring-milestone</id> 
 <name>Spring Maven MILESTONE Repository</name> 
 <url>http://maven.springframework.org/milestone</url> 
</repository> 
   
<dependency> 
 <groupId>org.springframework.data</groupId> 
 <artifactId>spring-data-redis</artifactId> 
 <version>1.0.0.RC1</version> 
</dependency>

如果没有使用maven,那直接下载jar包http://s3.amazonaws.com/dist.springframework.org/release/DATAKV/spring-data-redis-1.0.0.RELEASE.zip

3、spring配置文件里添加

1
2
3
4
5
6
7
8
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
        <property name="hostName" value="localhost"/> 
        <property name="port" value="6636"/> 
</bean> 
   
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
        <property name="connectionFactory" ref="jedisConnectionFactory"/> 
</bean>

那就可以直接用redisTemplate,redisTemplate和HibernateTemplate很相似。

4、Java代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
@Service 
public class RedisService { 
    @Resource 
    private RedisTemplate<Serializable, Serializable> template; 
   
 /**
     * 向redis里面添加key-value格式的数据
     *
     * @param key   key
     * @param value value
     */ 
   
    public void set(final Serializable key, final Serializable value) { 
        template.execute(new RedisCallback<Object>() { 
            @Override 
            public Object doInRedis(RedisConnection connection) throws DataAccessException { 
                byte[] key_ = RedisUtil.getBytesFromObject(key); 
                byte[] value_ = RedisUtil.getBytesFromObject(value); 
                connection.set(key_, value_); 
                return true
            
        }); 
    
   
 /**
     * 根据key从redis里面取出value
     *
     * @param key   key
     */ 
 public Serializable get(final Serializable key) { 
        return template.execute(new RedisCallback<Serializable>() { 
            @Override 
            public Serializable doInRedis(RedisConnection connection) throws DataAccessException { 
   
                byte[] keyBytes = RedisUtil.getBytesFromObject(key); 
                byte[] bytes = connection.get(keyBytes); 
                return (Serializable) RedisUtil.getObjectFromBytes(bytes); 
            
        }); 
    
}

看了一点JedisConnectionFactory,之际上它只是对Jedis做了下简单了封装,再加上自己的连接池实现。

redis缓存的安装和使用(转)的更多相关文章

  1. redis缓存的安装和使用

    Redis介绍    Redis本质上一个Key/Value数据库,与Memcached类似的NoSQL型数据库,但是他的数据可以持久化的保存在磁盘上,解决了服务重启后数据不丢失的问题,他的值可以是s ...

  2. redis缓存的安装和配置

    ubantu16.04环境下安装 下载安装,依次执行命令; # 从官方网站下载安装包,注意,当前在哪个目录下执行命令,下载的包将在哪个目录下 $ wget http://download.redis. ...

  3. Redis缓存全自动安装shell脚本

    我只是把命令放到shell文件中了,方便安装,代码如下: #!/bin/bash # shell的执行选项: # -n 只读取shell脚本,但不实际执行 # -x 进入跟踪方式,显示所执行的每一条命 ...

  4. redis缓存本地安装教程

    http://www.runoob.com/redis/redis-install.html

  5. RabbitMQ队列/Redis缓存

    一.RabbitMQ队列 RabbitMQ安装(Centos7安装):1.安装依赖:yum install socat (不安装会报错)2.下载rpm包:wget http://www.rabbitm ...

  6. wampserver2.5安装 redis缓存,igbinary, phalcon框架

    wampserver2.5安装 redis缓存,igbinary, phalcon框架 根据phalconphp说明文件,先将dll文件拖入到:安装盘:\wamp\bin\php\php5.5.12\ ...

  7. 第二百九十四节,Redis缓存-Redis安装

    redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sor ...

  8. Linux系统下Redis缓存安装配置

    Redis是一个高性能的key-value数据库,现时越来越多企业与应用使用Redis作为缓存服务器.楼主是一枚JAVA后端程序员,也算是半个运维工程师了.在Linux服务器上搭建Redis,怎么可以 ...

  9. 通过URLOS安装Redis缓存为wordpress网站提速

    快!快!快!我们都知道网站的加载速度直接影响用户体验.据研究发现,网站页面在3秒内加载完毕对用户而言是最佳的浏览体验.如果超过这个时间,用户跳出网站的几率会非常大.所以对于站长来说,提高速度是他们追求 ...

随机推荐

  1. Tomcat8.0源码编译

    最近打算开始研究一下Tomcat的工作原理,拜读一下源码.所以先从编译源码开始了.尽管网上有那么多的资料,但是总是觉得,自己研究一遍,写一遍,在动手做一遍能够让我们更加深入的了解.现在整个社会都流行着 ...

  2. git小乌龟图标不显示 windows系统

    1.修改注册表[windows + R 输入 regedit]进入注册信息,按照步骤找到 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curre ...

  3. 查看tomcat的版本号

    本经验主要介绍在windows下,如何查看tomcat的版本号. 工具/原料 安装了tomcat server的操作系统. 一.绿色版tomcat版本查看--命令catalina version 或者 ...

  4. 检测ip是否通过

    #!/bin/bashnetstat -an |grep "ESTABLISHED" |awk '{print $4}' |awk -F ':' '{print $1}' |sor ...

  5. PHP getcwd() 函数

    获取当前工作目录: <?phpecho getcwd()?> 结果: /home/php 定义和用法 getchwd() 函数返回当前工作目录. 语法 getcwd(); 技术细节 返回值 ...

  6. Android学习--写一个发送短信的apk,注意布局文件的处理过程!!!

    刚开始写Android程序如图发现使用了findViewById方法之后输出的话居然是null(空指针错误),也就是说这个方法没有成功.网上说这样写是在activity_main .xml去找这个ID ...

  7. [CSP-S模拟测试53]题解

    A.u 只涉及到区间修改可以考虑差分,然而如果每一行都差分复杂度还是过高.我们发现差分标记也是连续的(一行横着的一行斜着的),所以可以维护两个 差分的差分,扫两遍统计即可. #include<c ...

  8. Homestead中PHP扩展无phpize难以安装redis扩展的问题及解决办法

    这真是一个非常深的坑.homestead中自带很多版本的php.然而扩展中缺没有phpize,这个东西是php添加扩展需要的东西本人在laravel中需要用到Redis扩展.这个和laravel的pr ...

  9. Linux常用命令的使用方法

    Linux 命令大全 Linux 命令大全 1.文件管理 cat chattr chgrp chmod chown cksum cmp diff diffstat file find git gitv ...

  10. CTF 密码学(一)

    0x00 前言 为了练习python,强迫自己能用Python的题都用python解题还有各种密码 0x01 奇怪的字符串 实验吧题目:信息保密的需求和实际操作自古有之,与之相应的信息加密与解密也是历 ...