Redis快速入门

redis属于NoSql分类,它把数据都是缓存在内存中的,我们都知道内存的读写效率跟硬盘不是一个级别的,最后redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。既然用redis读取效率那么高,最后内容也会添加到磁盘那么我们就当然要使用它了。

下载地址:
https://redis.io/

下载安装Redis
打开Redis服务配置文件。注意:不要找错了,通常为redis.windows-service.conf,而不是redis.windows.conf。
找到含有requirepass字样的地方,追加一行,输入requirepass 12345。这是访问Redis时所需的密码,一般测试情况下可以不用设定密码。不过,即使是作为本地访问,也建议设定一个密码。此处以简单的12345来演示

image

确定服务启动
image

下载安装redis桌面管理工具
redis-desktop-manager
启动后新建连接
image

基本操作
image

若启动命令行测试
image

1.Redis基本操作
redis是一个key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset–有序集合)和hash(哈希类型)五种数据类型,存储形式均为字符串。
①String类型
存储:set key value
取值:get key
删除:del key
查看所有键:keys *

127.0.0.1:6379> set key1 "nihao"
OK
127.0.0.1:6379> set key2 "haha"
OK
127.0.0.1:6379> keys *
1) "key1"
2) "key2"

②Hash类型
相当于一个key对于一个map,map中还有key-value
存储:hset key field value
取值:hget key field

127.0.0.1:6379> hset zhangsan age 33
(integer) 1
127.0.0.1:6379> hset zhangsan weight 66
(integer) 1
127.0.0.1:6379> hget zhangsan age
"33"
127.0.0.1:6379> hget zhangsan weight
"66"
image

查看某个键对应的map里面的所有key:hkeys key
查看某个键对应的map里面的所有的value:hvals key
查看某个键的map:hgetall key

java5:0>hkeys zhangsan
 1)  "age"
 2)  "weight"
java5:0>hvals zhangsan
 1)  "33"
 2)  "66"
java5:0>hgetall zhangsan
 1)  "age"
 2)  "33"
 3)  "weight"
 4)  "66"

③List类型
存储:push,分为lpush list v1 v2 v3 v4 …(左边添加),rpush list v1 v2 v3 v4 …(右边添加)

java5:0>lpush list1 1 2 3 4
"4"
image

取值:pop,分为lpop lpop list(左边取,移除list最左边的值) ,rpop rpop list(右边取,移除list最右边的值)

java5:0>lpop list1
"4"
image

查看list:lrange key 0 2

lrange key 0 -1表示查看全部

java5:0>lrange list2 0 2
 1)  "wangwu"
 2)  "lisi"
 3)  "zhangsan"

存储,取值操作跟栈的存储,取值方法是一样的,而不是add,get,存储的值有序可以重复。用pop取值取完后该值就从list中移除了。

④Set类型
Set中的元素是无序不重复的,出现重复会覆盖
存储:sadd key v1 v2 v3 …

java5:0>sadd set1 hello world 123
"3"
``
移除:srem key v
```redis
java5:0>srem set1 123
"1"

查看set集合: smembers key

java5:0>smembers set1
 1)  "world"
 2)  "hello"

另外还提供了差集,交集,并集操作
差集:sdiff seta setb(seta中有setb中没有的元素)

redis:0>sadd set1 hello world nihao haha
"4"
redis:0>sadd set2 hello2 world2 nihao haha
"4"
redis:0>sdiff set1 set2
 1)  "hello"
 2)  "world"

交集:sinter seta setb

redis:0>sinter set1 set2
 1)  "haha"
 2)  "nihao"

并集:sunion seta setb

redis:0>sunion set1 set2
 1)  "hello2"
 2)  "haha"
 3)  "world"
 4)  "hello"
 5)  "world2"

⑤SortedSet,有序Set
存储:存储的时候要求对set进行排序,需要对存储的每个value值进行打分,默认排序是分数由低到高。zadd key 分数1 v1 分数2 v2 分数3 v3…

redis:0>zadd zset1 1 a 3 b 2 c 6 d 5 e 4 fredis:0> 
"6"
redis:0>zrange zset1 0 -1
 1)  "a"
 2)  "c"
 3)  "b"
 4)  "f"
 5)  "e"
 6)  "d"

取值:取指定的值 zrem key value(取出后,Set当中对应少一个)

redis:0>zrem zset1 b
"1"
redis:0>zrem zset1 a
"1"
redis:0>zrem zset1 c
"1"
image

取(遍历)所有的值(不包括分数):zrange key 0 -1,降序取值用zrevrange key 0 -1

redis:0>zrange zset1 0 -1
 1)  "f"
 2)  "e"
 3)  "d"

redis:0>zrevrange zset1 0 -1
 1)  "d"
 2)  "e"
 3)  "f"

取所有的值(带分数):zrange(zrevrange) key 0 -1 withscores

redis:0>zrange zset1 0 -1 withscores
 1)  "f"
 2)  "4"
 3)  "e"
 4)  "5"
 5)  "d"
 6)  "6"

⑥key命令
由于redis是内存存储数据,所以不能够存储过大的数据量,所以存储在redis中的数据,在不再需要的时候应该清除掉。比如,用户买完东西下订单,生成的订单信息存储了在redis中,但是用户一直没支付那么存储在redis中的订单信息就应该清除掉,这个时候就可以通过设置redis的过期时间来完成,一旦达到了过期时间就清除该信息。
设置key的过期时间:expired key 过期时间(秒)
查看key的有效剩余时间:ttl key

redis:0>expire zone 60 // 以秒为单位
"0"

redis:0>ttl zone
"-2"

redis:0>expire zset1 30
"1"

redis:0>ttl zset1
"23"

redis:0>ttl zset1
"6"

redis:0>ttl zset1
"-2"

清除key的过期时间,持久化该key:persist key

-1:表示持久化
-2:表示该key不存在

redis:0>expire set1 200
"1"

redis:0>ttl set1
"194"

redis:0>ttl set1
"172"

redis:0>persist set1
"1"

redis:0>ttl set1
"-1"

对于上面的基本操作,一般而言,至少得要掌握String类型,Hash类型以及key命令。


项目中使用redis

引入依赖

 <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis -->
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-redis</artifactId>
      <version>1.8.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-commons</artifactId>
      <version>1.8.4.RELEASE</version>
    </dependency>

db.properties

redis.host=127.0.0.1
redis.port=6379
redis.password=123456

redis.maxIdle=300
redis.maxWaitMillis=1000
redis.maxTotal=600
redis.testOnBorrow=true
redis.testOnReturn=true

配置文件application-redis.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!--设置连接池-->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdle}"/>
        <property name="maxTotal" value="${redis.maxTotal}" />
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
        <property name="testOnReturn" value="${redis.testOnReturn}" />
    </bean>

    <!--设置链接属性-->
    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName"><value>${redis.host}</value></property>
        <property name="port"><value>${redis.port}</value></property>
        <property name="password"><value>${redis.password}</value></property>
        <property name="poolConfig"><ref bean="poolConfig"></ref></property>
        <property name="timeout"><value>100000</value></property>
    </bean>

    <!-- Jedis模板配置  -->
    <bean id="redisMapper" class="org.springframework.data.redis.core.StringRedisTemplate">
        <property name="connectionFactory" ref="connectionFactory" />
    </bean>

</beans>
@Service
public class UserinfoServiceImpl implements UserinfoService {
    @Autowired
    UserinfoMapper userinfoMapper;
    @Autowired
    private RedisTemplate redisTemplate;
    @Override
    @Transactional
    public int add(Userinfo userinfo) {
        Object user = redisTemplate.opsForValue().get("user");
        int num = 0;
        if(user == null){
            num = userinfoMapper.add(userinfo);
            redisTemplate.opsForValue().set("user",String.valueOf(num));
        }
        return num;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • redis属于NoSql分类,它把数据都是缓存在内存中的,我们都知道内存的读写效率跟硬盘不是一个级别的,最后red...
    伍陆柒_阅读 1,627评论 0 0
  • redis属于NoSql分类,它把数据都是缓存在内存中的,我们都知道内存的读写效率跟硬盘不是一个级别的,最后red...
    果冻_4c9b阅读 132评论 0 0
  • redis属于NoSql分类,它把数据都是缓存在内存中的,我们都知道内存的读写效率跟硬盘不是一个级别的,最后red...
    北街九条狗阅读 948评论 0 1
  • redis属于NoSql分类,它把数据都是缓存在内存中的,我们都知道内存的读写效率跟硬盘不是一个级别的,最后red...
    数据萌新阅读 1,228评论 0 0
  • redis属于NoSql分类,它把数据都是缓存在内存中的,我们都知道内存的读写效率跟硬盘不是一个级别的,最后red...
    __元昊__阅读 834评论 0 0