redis

阶段一、认识redis

1、什么是redis

Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:RemoteDictionary Server,该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。

2、redis特点:

快速响应,数据量小

Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。

3、Redis应用场景:

因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。将这种热点数据存到Redis(内存)中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。

4、端口

mysql端口:3306

redis端口:6379

mongoDB端口:27017

阶段二、认识五种类型

1、string字符串
2、list列表
3、hash哈希
4、set集合
5、sorted sets有序集合

阶段三、五种类型的操作

进入redis

进入:redis-cli --raw

不能进入,就安装:

sudo apt-get update

sudo apt-get install redis-server

1、string字符串
  • 可以为整形、浮点型和字符串,统称为元素

# 基本操作
# 设置
set key value 例:set name 'zcm'
# 获取
get key 例:get name
# key是唯一的,不能用同一个key 不然就会覆盖

# 查看过期时间
# -1 表示永久 -2 表示不存在
ttl key 例: ttl name

# 设置过期时间
# expire key seconds 例: expire name 20
# 设置key的同时,设置过期时间
set key value ex seconds 例: set age 18 ex 20

setex key seconds value 例: setex sex 20 'nan'

# 追加
# 给已有的value,再添加新的值
append key value 例: append name love
# get name

# 设置/获取多个
# 设置多个 string
mset key value key value .. 例: mset username 'lucky' password ''
# 获取多个
mget key key key ... 例: mget username password

# key操作
# 查看所有的key 例: keys *
# 删除
del key 例: del name
# 查看key是否存在,存在返回 1,不存在返回 0
exists key
# 查看key类型
type key

# 运算
set num 1 # 自动识别,字符串里面的 整数
# +1
incr key 例: incr num
# -1
decr kye 例: decr num
# +整数
incrby key increment 例: incrby num 50
# -整数
decrby key increment 例: decrby num 50
2、list 列表

实现队列,元素不唯一,先入先出原则

# 设置
# lpush 左添加 (栈 先进后出)
lpush key value # 例: lpush li 1 2 3 4
# rpush 右添加 (队列 先进先出)
rpush key value # 例: rpush li 1 2 3 4

# 查看
# lrange key start stop
例 查看所有
lrange li 0 -1

# 获得list的元素个数
llen key 例: llen li

# 查看位于 lindex 位置上的元素
lindex key index 例: lindex li 3

# 删除
# 删除左边一个
lpop key 例:lpop li
# 删除右边一个
rpop key 例:rpop li
# 指定删除
rpush my_list a a b b c d e e f
# lrem key count value

# count > 0 从左往右 删除数量为count的value
例:lrem my_list 2 a
# count = 0 删除所有的 value
例:lrem my_list 0 b
# count < 0 从右往左 删除数量为count的value
例:lrem my_list -2 e
3、hash哈希

key : (field : value)

是一个string类型的field和value的映射表,特别适合用于存储对象

hash的key必须是唯一的

# 设置
# hset key field value 例:user {name:lucky} hest user name lucky
# 获取
# hget key field 例:hget user name
# 删除
# hdel key field 例:hdel user name
# 设置多个
# hmset key field value [field value]
例:user{name:lucky,age:18,sex:male}
hmset user name lucky age 18 sex male
# 获取多个
# hmget key field field..
例:hmget user name age sex
# 获取全部 field value
# hgetall key 例:hgetall user
# 获取所有的 field
# hkeys key 例:hkeys user
# 获取所有的 value
# hvals key 例:hvals user
# 获取 field 的个数
# hlen key 例:hlen user
# 获取 field 的类型
# type key 例:type user
4、set集合

各不相同的元素

# 设置
# sadd key value [value] (唯一,无序)
例:sadd my_set a w c d w e
# 获取
# smembers key 例:smembers my_set
# 删除
# srem 指定删除 srem key member 例:srem my_set c
# spop 随机删除 spop key 例:spop my_set
# 移动一个集合的值到另一个集合
# smove oldkey newkey member 例:smove my_set my_set2 b
# 判断集合存在某个值
# sismember key value 例:sismember my_set2 b
# 交集
# sinter key1 key2 .. 例:sinter my_set my_set2
# 把 key1 key2 的交集合并到 newkey
# sinterstore newkey key1 key2 例:sinterstore new_set my_set my_set2
# 并集
# sunion key1 key2 .. 例:sunion my_set my_set2
# 把 key1 key2 的并集合并到 newkey
# sunionstore newkey key1 key2 例:sunionstore new_set2 my_set my_set2
# 差集
# sdiff key1 key2 例:sdiff my_set my_set2
# 把key1 key2 的差集合并到 newkey
# sdiffstore newkey key1 key2 例:sdiffstore new_set3 my_set my_set2
# 获得集合个数
# scard key 例:scard my_set
# 随机返回一个
# srandmember key 例:srandmember my_set
5、sorted set有序集合
# 设置
# zadd key score member (权,权重,顺序)
例:
zadd my_zset 1 'one'
zadd my_zset 2 'two'
zadd my_zset 3 'three'
zadd my_zset 4 'four'
zadd my_zset 5 'five'
# 获取
# zrange 正序
# zrange key start stop (withscores) 例:zrange my_zset 0 -1
# zrevrange 倒序
# zrevrange key start stop 例:zrevrange my_zset 0 -1
# 删除
# zrem key member 例:zrem my_zset two
# 索引
# zrank 正序
# zrank key member 例:zrank my_zset three
# zrevrank 反序
# zrevrank key member 例:zrevank my_zset three
# zcard 查看有序集合元素数
# zcard key 例:zcard my_zset
# zrangebyscore 返回集合中 score 在给定区间的元素
# zrange my_zset 0 -1 withscores 返回全部元素
# zrangebyscore my_zset 2 3 withscores 返回了 score 在 2~3 区间的元素
# zcount 返回集合中 score 在给定区间的数量
# zcount key min max 例:zcount my_zset 2 3
# zscore 查看score值
# zscore key member 例:zscore my_zset one
# zremrangebyrank 删除集合中排名在给定区间的元素
# zrange my_zset 0 -1 withscores 删除全部元素
# zremrangebyrank my_zset 1 3
# zremrangebyscore 删除集合中 score 在给定区间的元素
# zrange my_zset 0 -1 withscores 删除全部元素
# zremrangebyscore my_zset 1 2

05 redis(进阶)的更多相关文章

  1. Redis进阶实践之九 独立封装的RedisClient客户端工具类(转载9)

    Redis进阶实践之九 独立封装的RedisClient客户端工具类 一.引言 今天开始有关Redis学习的第九篇文章了,以后肯定会大量系统使用Redis作为缓存介质,为了更好的更好的Redis,自己 ...

  2. Redis进阶实践之十三 Redis的Redis-trib.rb文件详解

    一.简介     事先说明一下,本篇文章不涉及对redis-trib.rb源代码的分析,只是从使用的角度来阐述一下,对第一次使用的人来说很重要.redis-trib.rb是redis官方推出的管理re ...

  3. Redis进阶实践之十六 Redis大批量增加数据

    一.介绍      有时,Redis实例需要在很短的时间内加载大量先前存在或用户生成的数据,以便尽可能快地创建数百万个键.这就是所谓的批量插入,本文档的目标是提供有关如何以尽可能快的速度向Redis提 ...

  4. Redis进阶实践之十八 使用管道模式加速Redis查询

    一.引言             学习redis 也有一段时间了,该接触的也差不多了.后来有一天,以为同事问我,如何向redis中批量的增加数据,肯定是大批量的,为了这主题,我从新找起了解决方案.目前 ...

  5. Redis进阶实践之十三 Redis的Redis-trib.rb脚本文件使用详解

    转载来源:http://www.cnblogs.com/PatrickLiu/p/8484784.html 一.简介 事先说明一下,本篇文章不涉及对redis-trib.rb源代码的分析,只是从使用的 ...

  6. Redis进阶实践之七Redis和Lua初步整合使用(转载 7)

    Redis进阶实践之七Redis和Lua初步整合使用 一.引言 Redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运 ...

  7. Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务(转载6)

    Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务 一.引言 今天本来没有打算写这篇文章,但是,今天测试Redis的时候发现了两个问题 ...

  8. Redis进阶实践之五Redis的高级特性(转载 5)

    Redis进阶实践之五Redis的高级特性 一.引言 上一篇文章写了Redis的特征,使用场景,同时也介绍了Redis的基本数据类型,redis的数据类型是操作redis的基础,这个必须好好的掌握.今 ...

  9. Redis进阶实践之四Redis的基本数据类型(转载4)

    Redis进阶实践之四Redis的基本数据类型 一.引言 今天正式开始了Redis的学习,如果要想学好Redis,必须先学好Redis的数据类型.Redis为什么会比以前的Memchaed等内存缓存软 ...

  10. Redis进阶实践之三如何在Windows系统上安装安装Redis(转载)

    Redis进阶实践之三如何在Windows系统上安装安装Redis 一.Redis的简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 ...

随机推荐

  1. 2017年Nature文章“Millions of online book co-purchases reveal partisan differences in the consumption of science”阅读笔记

    论文:      Millions of online book co-purchases reveal partisan differences in the consumption of scie ...

  2. 使用版本 1.0.0 的 Azure ARM SDK for Java 创建虚拟机时报错

    问题描述 我们可以通过使用 Azure ARM SDK 来管理 Azure 上的资源,因此我们也可以通过 SDK 来创建 ARM 类型的虚拟机,当我们使用 1.0.0 版本的 Azure SDK fo ...

  3. spring与mybatis的整合

    整合的思路 SqlSessionFactory对象放到spring容器中作为单例存在. 传统dao的开发方式中,从spring容器中获得sqlsession对象. Mapper代理形式中,从sprin ...

  4. Python新式类 单例模式与作用域(四)

    1 新式类与旧式类 新式类拥有经典类的全部特性之外,还有一些新的特性,比如 __init__发生变化,新增了静态方法__new__,python3目前都采用新式类,新式类是广度优先,旧式类是深度优先 ...

  5. mysql 省市数据

    CREATE TABLE `province` ( `id` ) DEFAULT NULL, `name` ) DEFAULT NULL ) ENGINE=INNODB DEFAULT CHARSET ...

  6. Win10下使用VSCode配置python运行环境

    VSCode配置python运行环境 安装python 到官网下载python,直接安装即可,在安装过程中可以选择将python加入环境变量 安装VSCode 官网下载,直接安装 配置 安装pytho ...

  7. RAC共享磁盘挂载工具

    待更新: oracleasm: udev: 自己搭建个存储服务器:

  8. 原文:I don’t want to see another “using namespace xxx;” in a header file ever again

    http://stackoverflow.com/questions/5849457/using-namespace-in-c-headers http://stackoverflow.com/que ...

  9. OC 结构体

    void test() { // 这个机构只能在函数内部使用 // 定义一个名为Student的结构体类型 struct Student { int age; // 年龄 char *name; // ...

  10. BZOJ4520:[CQOI2016]K远点对(K-D Tree)

    Description 已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对. Input 输入文件第一行为用空格隔开的两个整数 N, K.接下来 N 行,每行两个整数 X,Y,表示一个点 的坐标 ...