Redis学习笔记

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

 


Window 下安装

下载地址:https://github.com/dmajkic/redis/downloads

下载到的Redis支持32bit和64bit。根据自己实际情况选择,将64bit的内容cp到自定义盘符安装目录取名redis。 如 C:\reids

打开一个cmd窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.conf 。

如果想方便的话,可以把redis的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个redis.conf可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:

redis安装

这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。

切换到redis目录下运行 redis-cli.exe -h 127.0.0.1 -p 6379 。

设置键值对 set myKey abc

取出键值对 get myKey

 

Linux安装

1.下载并安装:

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

$ tar xzf redis-2.8.17.tar.gz

$ cd redis-2.8.17

$ make

2.编译并安装

$ cd redis-2.8.17/src

$ make PREFIX=~/redis/redis install

3.在解压后的目录拷贝redis.conf文件到安装目录下

$ cd redis-2.8.17

$ cp redis.conf ~/redis/redis6379

3-1.redis前端程序启动

$ cd ~/redis/redis6379/bin

$ ./redis-server

3-2.修改redis.conf文件中 ’daemonize no‘ 修改为 'daemonize yes'

3-3.redis后端程序启动

./redis-server ./redis.conf

4.查看redis启动状态

$ ps aux|grep redis

5.查看 redis 是否启动?

$ ./redis-cli

redis 127.0.0.1:6379> ping

PONG

 

./redis-cli -p 6379 //指点链接redis

./redis-cli -h 192.168.1.107 -p 7111 //链接指定的redis


Redis数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

key定义的注意:1.不要超过1024个字节


String(字符串)

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个键最大能存储512MB。

#相关命令

set name imooc //设值

get name //取值

incr num(key) //递增

incrby num 5 //递增 5

decr num(key) //递减

decrby num 4 //递减4

append num 7 //在后面追加7

 

List(字符串列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)

ArrayList使用数组方式

LinkedList使用双向链表方式

“redis.net.cn”是List列表名称,列表最多可存储 23^2 - 1 元素 (4294967295, 每个列表可存储40多亿)

#相关命令

//两端添加

lpush mylist(key) a b c //添加左侧元素

rpush mylist 1 2 3 //添加右侧元素

//查看列表

lrange mylist 0(开始位置) 5(结束位置)

lrange mylist 0 -2(倒数第二个)

//两端弹出

lpop mylist //弹出后list中没有该元素(左侧)

rpop mylist //右侧弹出

//获取元素个数

llen mylist

//把‘x’插入到mylist前面,有则插入

lpushx mylist x //左侧

rpushx mylist2 y //右侧

//lrem mylist 2 3 //从头到

 

zset(sorted set : 有序字符串集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

zadd 命令

添加元素到集合,元素在集合中存在则更新对应score

zadd key score member

#相关命令

#添加元素

zadd mysort 70(分数) zs 80 ls 90 ww

zadd mysort 100 zs //会把‘zs’中的分数给替换为‘100’

#获得元素

zcard mysort //获取集合中成员数量

(注意:相同元素的不能添加)

zscore mysort zs //获取元素分数

(注意:添加相同元素时,元素不能添加,分数会覆盖)

#删除元素

zrem mysort ls ww //删除‘ls’和‘ww’

zremrangebyrank mysort 0 4 //根据范围(排序)删除元素

zremrangebyscore mysort 80 100 //根据范围(分数)删除元素

#范围查询

zrange mysort 0 -1 //从第一个元素到最后一个元素查询(正序)

zrange mysort 0 -1 withscores //元素查询时,可以获取它的分数

zrangebyscore mysort 0 100 withscores //根据分数范围查询

zrevrange mysort 0 -1 withscores //元素查询(反序)

#扩展命令

zrangebyscore mysort 0 100 withscores limit 0 2 //根据分数范围查询,分页查询 页大小为2,页码是1

 

zincrby mysort 3 ls //给指定的元素分数添加‘3’

zcount mysort 80 90 //查看80-90分的元素的个数

 

Hash(哈希)

Redis hash 是一个键值对集合。

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

使用了 Redis HMSET, HEGTALL 命令,user:1 为键值。每个 hash 可以存储 23^2 - 1 键值对(40多亿)

#相关命令

hset myhash(key) username(属性) jack(字段名) //设单个属性值

hset myhash age 18

 

hget myhash username //获取单个属性值

hmset myhash2 username rose age 21 //设值多个属性值

hmget myhash username age //获取多个属性值

 

hgetall myhash //获取key中所有属性值

hdel myhash2 username age //删除多个字段

del myhash2 //删除整个hash

hincrby myhash age 5 //hash中增加数字

hexists myhash username //判断myhash中的username是否存在

hlen myhash //获取属性数量

hkeys myhash //获取属性中所有的名称

 

hvals myhash //获取属性中的值

 

 

 

Set(字符串集合)

Redis的Set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

Set集合中不允许出现重复元素

sadd 命令

添加一个string元素到,key对应的set集合中,成功返回1,如果元素以及在集合中返回0,key对应的set不存在返回错误。

sadd key member

注意:以上实例中 rabitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

#相关命令

#添加/删除元素

sadd myset a b c //添加元素(添加过后不能再添加相同的值)

 

srem myset a b //删除元素

#获取集合中的元素

smembers myset //查看set集合中的元素

sismember myset a //判断集合中是否存在'a'

#集合中的差集运算

sadd mya1 a b c

sadd myb1 a c 1 2

sdiff mya1 myb1

 

#集合中的交集运算

sadd mya2 a b c

sadd myb2 a c 1 2

sinter mya2 myb2

 

#集合中的并集运算

sadd mya3 a b c

sadd myb3 a c 1 2

sunion mya3 myb3

 

#扩展命令

scard myset //得到集合中的元素数量

srandmember myset //随机获取集合中的元素

 

sdiffstore my1 mya1 myb1 //把mya1与myb1相差的值放到my1中

 

sinterstore my2 mya2 myb2 //把mya2与myb2的交集放到my2

 

sunionstore my3 mya3 myb3 //把mya3yumyb3的并集放到my3

 

smembers my1

 

./redis-cli -h 192.168.0.66 -p 6379 //连接redis服务器

clear //清楚控制台

 

#通用命令

keys * //查询所有的key

keys my? //查询以‘my’开头的key

del my1 my2 my3 //删除指定的key

exists my1 //检验key是否存在

rename my1(旧的名称) newmy1(新的名称) //重命名

expire newmy1 1000 //设置过期时间为1000秒

ttl newmy1 //查看key所剩的时间

type newmy1 //获取指定key的类型

 

redis特性

#多数据库

select 1 //选择数据库

最多连接16台数据库

flushall //清除数据库

清除数据库1时,会把数据库0给清除掉

move myset(key) 1(一号数据库) //移动key到其他数据库

#事务

在事务中所有命令都会串行化执行,不会给其他数据库有任何命令,事务中的命令都会原子化执行,当出现异常时,后面的命令都会被执行,在运行时,当出现硬件问题、网络中断等等,事务中的命令将不会被执行,事务外的才会执行

multi //事务开启,在‘multi’里的命令都被视为事务中的命令,存储在命令的队列当中

exec //相当于提交 当执行这个命令,事务里面的命令都会被原子化执行

discard //相当于回滚

#事务的提交

窗口1

 

窗口2:窗口1累加两次后,窗口2获取值时还是2

窗口1:提交事务

窗口2:这时窗口2才能看到累加的结果

#事务的回滚

感兴趣的朋友可以关注微信公众号(会定时推送新的知识):

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值