日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis缓存的安装和使用

發(fā)布時間:2025/4/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis缓存的安装和使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自:http://blog.csdn.net/catoop/article/details/7549911

Redis介紹
??? Redis本質(zhì)上一個Key/Value數(shù)據(jù)庫,與Memcached類似的NoSQL型數(shù)據(jù)庫,但是他的數(shù)據(jù)可以持久化的保存在磁盤上,解決了服務(wù)重啟后數(shù)據(jù)不丟失的問題,他的值可以是string(字符串)、list(列表)、sets(集合)或者是ordered? sets(被排序的集合),所有的數(shù)據(jù)類型都具有push/pop、add/remove、執(zhí)行服務(wù)端的并集、交集、兩個sets集中的差別等等操作,這些操作都是具有原子性的,Redis還支持各種不同的排序能力
??? Redis 2.0更是增加了很多新特性,如:提升了性能、增加了新的數(shù)據(jù)類型、更少的利用內(nèi)存(AOF和VM)
??? Redis支持絕大部分主流的開發(fā)語言,如:C、Java、C#、PHP、Perl、Python、Lua、Erlang、Ruby等等
??? 官網(wǎng):http://code.google.com/p/redis/

Redis性能
??? 根據(jù)Redis官方的測試結(jié)果:在50個并發(fā)的情況下請求10w次,寫的速度是110000次/s,讀的速度是81000次/s
地址:http://code.google.com/p/redis/wiki/Benchmarks

一、安裝過程:
最新穩(wěn)定版,Redis 2.0.4 stable
wget http://redis.googlecode.com/files/redis-2.6.7.tar.gz (其他版本到官網(wǎng)下載即可)
tar zxf redis-2.6.7.tar.gz
cd redis-2.6.7
與其它軟件不同的是,不需要configure。
make
裝完了。

創(chuàng)建一個目錄
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為標(biāo)準(zhǔn)輸出,2為錯誤輸出)

停止 ./redis-cli shutdown

客戶端連接 ./redis-cli


三、測試:

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

> quit
退出連接

> dbsize
(integer) 12

當(dāng)前數(shù)據(jù)庫中key的數(shù)量

> info
服務(wù)器基本信息

monitor

實(shí)時轉(zhuǎn)儲收到的請求

config get
獲取服務(wù)器的參數(shù)配置

flushdb
清空當(dāng)前數(shù)據(jù)庫

flushall
清除所有數(shù)據(jù)庫
?

四、附注

redis.conf配置文件:
引用
#是否作為守護(hù)進(jìn)程運(yùn)行
daemonize yes
#配置pid的存放路徑及文件名,默認(rèn)為當(dāng)前路徑下
pidfile redis.pid
#Redis默認(rèn)監(jiān)聽端口
port 6379
#客戶端閑置多少秒后,斷開連接
timeout 300
#日志顯示級別
loglevel verbose
#指定日志輸出的文件名,也可指定到標(biāo)準(zhǔn)輸出端口
logfile stdout
#設(shè)置數(shù)據(jù)庫的數(shù)量,默認(rèn)連接的數(shù)據(jù)庫是0,可以通過select N來連接不同的數(shù)據(jù)庫
databases 16
#保存數(shù)據(jù)到disk的策略
#當(dāng)有一條Keys數(shù)據(jù)被改變是,900秒刷新到disk一次
save 900 1
#當(dāng)有10條Keys數(shù)據(jù)被改變時,300秒刷新到disk一次
save 300 10
#當(dāng)有1w條keys數(shù)據(jù)被改變時,60秒刷新到disk一次
save 60 10000
#當(dāng)dump? .rdb數(shù)據(jù)庫的時候是否壓縮數(shù)據(jù)對象
rdbcompression yes
#dump數(shù)據(jù)庫的數(shù)據(jù)保存的文件名
dbfilename dump.rdb
#Redis的工作目錄
dir /home/falcon/redis-2.0.0/
###########? Replication #####################
#Redis的復(fù)制配置
# slaveof <masterip> <masterport>
# masterauth <master-password>

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

############### LIMITS ##############
#最大客戶端連接數(shù)
# maxclients 128
#最大內(nèi)存使用率
# maxmemory <bytes>

########## APPEND ONLY MODE #########
#是否開啟日志功能
appendonly no
# 刷新日志到disk的規(guī)則
# 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所有常用命令

[html] view plaincopy
  • 常規(guī)操作命令??
  • ???
  • 01??exits?key??????????????//測試指定key是否存在,返回1表示存在,0不存在??
  • 02??del?key1?key2?....keyN?//刪除給定key,返回刪除key的數(shù)目,0表示給定key都不存在??
  • 03??type?key???????????????//返回給定key的value類型。返回?none?表示不存在key,string字符類型,list?鏈表類型?set?無序集合類型...??
  • 04??keys?pattern???????????//返回匹配指定模式的所有key,下面給個例子??
  • 05??randomkey??????????????//返回從當(dāng)前數(shù)據(jù)庫中隨機(jī)選擇的一個key,如果當(dāng)前數(shù)據(jù)庫是空的,返回空串??
  • 06??rename?oldkey?newkey???//原子的重命名一個key,如果newkey存在,將會被覆蓋,返回1表示成功,0失敗。可能是oldkey不存在或者和newkey相同??
  • 07??renamenx?oldkey?newkey?//同上,但是如果newkey存在返回失敗??
  • 08??dbsize?????????????????//返回當(dāng)前數(shù)據(jù)庫的key數(shù)量??
  • 09??expire?key?seconds?????//為key指定過期時間,單位是秒。返回1成功,0表示key已經(jīng)設(shè)置過過期時間或者不存在??
  • 10??ttl?key????????????????//返回設(shè)置過過期時間的key的剩余過期秒數(shù)?-1表示key不存在或者沒有設(shè)置過過期時間??
  • 11??select?db-index????????//通過索引選擇數(shù)據(jù)庫,默認(rèn)連接的數(shù)據(jù)庫所有是0,默認(rèn)數(shù)據(jù)庫數(shù)是16個。返回1表示成功,0失敗??
  • 12??move?key?db-index??????//將key從當(dāng)前數(shù)據(jù)庫移動到指定數(shù)據(jù)庫。返回1成功。0?如果key不存在,或者已經(jīng)在指定數(shù)據(jù)庫中??
  • 13??flushdb????????????????//刪除當(dāng)前數(shù)據(jù)庫中所有key,此方法不會失敗。慎用??
  • 14??flushall???????????????//刪除所有數(shù)據(jù)庫中的所有key,此方法不會失敗。更加慎用??
  • string?類型數(shù)據(jù)操作命令??
  • ???
  • 01??set?key?value?????????//設(shè)置key對應(yīng)的值為string類型的value,返回1表示成功,0失敗??
  • 02??setnx?key?value???????//同上,如果key已經(jīng)存在,返回0?。nx?是not?exist的意思??
  • 03??get?key???????????????//獲取key對應(yīng)的string值,如果key不存在返回nil??
  • 04??getset?key?value??????//原子的設(shè)置key的值,并返回key的舊值。如果key不存在返回nil??
  • 05??mget?key1?key2?...?keyN????????????//一次獲取多個key的值,如果對應(yīng)key不存在,則對應(yīng)返回nil。下面是個實(shí)驗,首先清空當(dāng)前數(shù)據(jù)庫,然后設(shè)置k1,k2.獲取時k3對應(yīng)返回nil??
  • 06??mset?key1?value1?...?keyN?valueN???//一次設(shè)置多個key的值,成功返回1表示所有的值都設(shè)置了,失敗返回0表示沒有任何值被設(shè)置??
  • 07??msetnx?key1?value1?...?keyN?valueN?//同上,但是不會覆蓋已經(jīng)存在的key??
  • 08??incr?key??????????????//對key的值做加加操作,并返回新的值。注意incr一個不是int的value會返回錯誤,incr一個不存在的key,則設(shè)置key為1??
  • 09??decr?key??????????????//同上,但是做的是減減操作,decr一個不存在key,則設(shè)置key為-1??
  • 10??incrby?key?integer????//同incr,加指定值?,key不存在時候會設(shè)置key,并認(rèn)為原來的value是?0??
  • 11??decrby?key?integer????//同decr,減指定值。decrby完全是為了可讀性,我們完全可以通過incrby一個負(fù)值來實(shí)現(xiàn)同樣效果,反之一樣。??
  • 12??append?key?value??????//給指定key的字符串值追加value,返回新字符串值的長度。下面給個例子??
  • 13??substr?key?start?end??//返回截取過的key的字符串值,注意并不修改key的值。下標(biāo)是從0開始的,接著上面例子??
  • list?類型數(shù)據(jù)操作命令??
  • ???
  • 01??lpush?key?string??????????//在key對應(yīng)list的頭部添加字符串元素,返回1表示成功,0表示key存在且不是list類型??
  • 02??rpush?key?string??????????//同上,在尾部添加??
  • 03??llen?key??????????????????//返回key對應(yīng)list的長度,key不存在返回0,如果key對應(yīng)類型不是list返回錯誤??
  • 04??lrange?key?start?end??????//返回指定區(qū)間內(nèi)的元素,下標(biāo)從0開始,負(fù)值表示從后面計算,-1表示倒數(shù)第一個元素?,key不存在返回空列表??
  • 05??ltrim?key?start?end???????//截取list,保留指定區(qū)間內(nèi)元素,成功返回1,key不存在返回錯誤??
  • 06??lset?key?index?value??????//設(shè)置list中指定下標(biāo)的元素值,成功返回1,key或者下標(biāo)不存在返回錯誤??
  • 07??lrem?key?count?value??????//從key對應(yīng)list中刪除count個和value相同的元素。count為0時候刪除全部??
  • 08??lpop?key??????????????????//從list的頭部刪除元素,并返回刪除元素。如果key對應(yīng)list不存在或者是空返回nil,如果key對應(yīng)值不是list返回錯誤??
  • 09??rpop??????????????????????//同上,但是從尾部刪除??
  • 10??blpop?key1...keyN?timeout?//從左到右掃描返回對第一個非空list進(jìn)行l(wèi)pop操作并返回,比如blpop?list1?list2?list3?0?,如果list不存在list2,list3都是非空則對list2做lpop并返回從list2中刪除的元素。如果所有的list都是空或不存在,則會阻塞timeout秒,timeout為0表示一直阻塞。當(dāng)阻塞時,如果有client對key1...keyN中的任意key進(jìn)行push操作,則第一在這個key上被阻塞的client會立即返回。如果超時發(fā)生,則返回nil。有點(diǎn)像unix的select或者poll??
  • 11??brpop?????????????????????//同blpop,一個是從頭部刪除一個是從尾部刪除??
  • 12??rpoplpush?srckey?destkey??//從srckey對應(yīng)list的尾部移除元素并添加到destkey對應(yīng)list的頭部,最后返回被移除的元素值,整個操作是原子的.如果srckey是空或者不存在返回nil??
  • set?類型數(shù)據(jù)操作命令??
  • ???
  • 01??sadd?key?member????????????????//添加一個string元素到,key對應(yīng)的set集合中,成功返回1,如果元素以及在集合中返回0,key對應(yīng)的set不存在返回錯誤??
  • 02??srem?key?member????????????????//從key對應(yīng)set中移除給定元素,成功返回1,如果member在集合中不存在或者key不存在返回0,如果key對應(yīng)的不是set類型的值返回錯誤??
  • 03??spop?key???????????????????????//刪除并返回key對應(yīng)set中隨機(jī)的一個元素,如果set是空或者key不存在返回nil??
  • 04??srandmember?key????????????????//同spop,隨機(jī)取set中的一個元素,但是不刪除元素??
  • 05??smove?srckey?dstkey?member?????//從srckey對應(yīng)set中移除member并添加到dstkey對應(yīng)set中,整個操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key不是set類型返回錯誤??
  • 06??scard?key??????????????????????//返回set的元素個數(shù),如果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對應(yīng)set的所有元素,結(jié)果是無序的??
  • sorted?set?類型數(shù)據(jù)操作命令??
  • ???
  • 01??zadd?key?score?member????????//添加元素到集合,元素在集合中存在則更新對應(yīng)score??
  • 02??zrem?key?member??????????????//刪除指定元素,1表示成功,如果元素不存在返回0??
  • 03??zincrby?key?incr?member??????//增加對應(yīng)member的score值,然后移動元素并保持skip?list保持有序。返回更新后的score值??
  • 04??zrank?key?member?????????????//返回指定元素在集合中的排名(下標(biāo)),集合中元素是按score從小到大排序的??
  • 05??zrevrank?key?member??????????//同上,但是集合中元素是按score從大到小排序??
  • 06??zrange?key?start?end?????????//類似lrange操作從集合中去指定區(qū)間的元素。返回的是有序結(jié)果??
  • 07??zrevrange?key?start?end??????//同上,返回結(jié)果是按score逆序的??
  • 08??zrangebyscore?key?min?max????//返回集合中score在給定區(qū)間的元素??
  • 09??zcount?key?min?max???????????//返回集合中score在給定區(qū)間的數(shù)量??
  • 10??zcard?key????????????????????//返回集合中元素個數(shù)??
  • 11??zscore?key?element???????????//返回給定元素對應(yīng)的score??
  • 12??zremrangebyrank?key?min?max??//刪除集合中排名在給定區(qū)間的元素??
  • 13??zremrangebyscore?key?min?max?//刪除集合中score在給定區(qū)間的元素??
  • hash?類型數(shù)據(jù)操作命令??
  • ???
  • 01??hset?key?field?value???????//設(shè)置hash?field為指定值,如果key不存在,則先創(chuàng)建??
  • 02??hget?key?field?????????????//獲取指定的hash?field??
  • 03??hmget?key?filed1....fieldN?//獲取全部指定的hash?filed??
  • 04??hmset?key?filed1?value1?...?filedN?valueN?//同時設(shè)置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數(shù)量??
  • 09??hkeys?key??????????????????//返回hash的所有field??
  • 10??hvals?key??????????????????//返回hash的所有value??
  • 11??hgetall????????????????????//返回hash的所有filed和value??


  • 六、spring中整合redis
    看了Java Clients,redis官網(wǎng)比較推薦Jedis,而spring對redis的客服端做了一個統(tǒng)一封裝,支持(Jedis,? JRedis, and RJC),這里對說下SPRING DATA - REDIS。

    1、使用maven的話那就很簡單了,直接加入依賴。

    2、編輯pom.xml

    [html] view plaincopy
  • <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配置文件里添加

    [html] view plaincopy
  • <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代碼

    [html] view plaincopy
  • @Service????
  • public?class?RedisService?{????
  • ????@Resource????
  • ????private?RedisTemplate<Serializable,?Serializable>?template;????
  • ????
  • ?/**???
  • ?????*?向redis里面添加key-value格式的數(shù)據(jù)???
  • ?????*???
  • ?????*?@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;????
  • ????????????}????
  • ????????});????
  • ????}????
  • ????
  • ?/**???
  • ?????*?根據(jù)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);????
  • ????????????}????
  • ????????});????
  • ????}????
  • }????

  • 看了一點(diǎn)JedisConnectionFactory,之際上它只是對Jedis做了下簡單了封裝,再加上自己的連接池實(shí)現(xiàn)。

    總結(jié)

    以上是生活随笔為你收集整理的redis缓存的安装和使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。