redis 基本功能

redis 安装:

-下教安装、编译源码安装- brew、apt、yum安装 - docker 方式启动

docker pull redis //拉下镜像

docker run -itd --name redis-test -p 6379:6379 redis //拉完run一下这个容器

docker image inspect redis:latestlgrep-i version //版本信息

docker exec -it redis-test /bin/bash

$ redis-cli

info

默认 Docker 没有redis.conf文件

可以使用docker -v 文件路径映射方式 把当前的宿主机上面的一个文件 映射到docker

$ docker run -p 6379:6379 --name redis01 -v /etc/redis/redis.conf:/etc/redis/redis.conf -v /etc/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

大家都说redis 性能好?怎么体现呢? redis性能测试

docker 容器下

# redis-benchmark -n 100000 -c 32 -t SET,GET,INCR,HSET,LPUSH,MSET //set get incr hset lphsh mest

输出的结果

SET: 82372.32 requests per second

GET: 93109.87 requests per second

INCR: 98328.42 requests per second

LPUSH: 87489.06 requests per second

HSET: 77279.75 requests per second

MSET (10 keys): 70175.44 requests per second

每秒的QBS 9万左右 可以调参数 影响的内容有很多 内存 硬盘 运行大小等等

Redis的五种基本数据结构

1.字符串(string)~ 简单来说就是三种:int、string、byte[]

字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该 类型可以接受任何格式的数据,如 JPEG 图像数据或 json 对象描述信息等。在 Redis 中字符串类 型的 value 最多可以容纳的数据长度是512M。 set/get/getset/del/exists/append

incr/decr/incrby/decrby

注意: 1、字符串 append:会使用更多的内存 *比如 字符串的长度为100 在append 就会默认增大一倍的内存 造成浪费

2、整数共享:如何能使用整数,就尽量使用整数,限制了 redis 内存+LRU * 整数int能够共享但是一定情况下影响了 他本身的淘汰的策略

3、整数精度问题:redis 大概能保证16~,,17-18位的大整数就会丢失精确 (int 整数一般16位数怎么也够用了 大于就用string)

2.散列(hash)- Map ~ Pojo Class

Redis 中的 Hash 类型可以看成具有 String key 和 String value 的 map 容器。

所以该类型非常 适合于存储对象的信息。如 Username、password 和 age。

如果 Hash 中包含少量的字段,那 么该类型的数据也将仅占用很少的磁盘空间。

hset/hget/hmset/hmget/hgetall/hdel/hincrby

hexists/hlen/hkeys/hvals

==> hashmap 的方法

3.列表(list)~ java 的 LinkedList

在 Redis 中,List 类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表 一样,我们 可以在其头部(Left)和尾部(Right)添加新的元素。在插入时,如果该键并不存在,Redis 将 为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据 库中删除。

lpush/rpush/ 左右插入元素

lrange/lpop/rpop 。区间 / 左右弹出元素

4.集合(set)~ java 的 set,不重复的 list

在 redis 中,可以将 Set 类型看作是没有排序的字符集合,和 List 类型一样,我们也可以在该类型 的数值上执行添加、删除和判断某一元素是否存在等操作。这些操作的时间复杂度为O(1),即常量 时间内完成依次操作。

和List类型不同的是,Set 集合中不允许出现重复的元素。

sadd/srem/smembers/sismember ~ set.add, remove, contains, 添加/删除/数字/

sdiff/sinter/sunion ~ 集合求差集,求交集,求并集

- 5.有序集合(sorted set)

sortedset 和 set 极为相似,他们都是字符串的集合,都不允许重复的成员出现在一个 set 中。他们之间的主要差别是 sortedset 中每一个成员都会有一个分数与之关联。redis 正是通过分数来为 集合的成员进行从小到大的排序。sortedset 中分数是可以重复的。

zadd key score member score2 member2... : 将成员以及该成员的分数存放到

sortedset 中 zscore key member : 返回指定成员的分数

zcard key : 获取集合中成员数量

zrem key member [member...] : 移除集合中指定的成员,可以指定多个成员

zrange key start end [withscores] : 获取集合中脚注为 start-end 的成员,

[withscores]参数表 明返回的成员包含其分数

zrevrange key start stop [withscores] : 按照分数从大到小的顺序返回索引从 start 到 stop 之间 的所有元素(包含两端的元素) zremrangebyrank key start stop : 按照排名范围删除元素

Redis的三种高级数据结构

  • Bitmaps:setbit/getbit/bitop/bitcount/bitpos bitmaps 不是一个真实的数据结构。而是 String 类型上的一组面向 bit 操作的集合。由于strings 是二进制安全的 blob,并且它们的最大长度是512m,所以bitmaps能最大设置2^32个不同的 bit。 (位图)

  • Hyperloglogs:pfadd/pfcount/pfmerge 在 redis 的实现中,您使用标准错误小于1%的估计度量结束。这个算法的神奇在于不再需要与需 要统计的项相对应的内存,取而代之,使用的内存一直恒定不变。最坏的情况下只需要12k,就可 以计算接近2^64个不同元素的基数。 (概率学)

  • GEO:geoadd/geohash/geopos/geodist/georadius/georadiusbymember Redis 的 GEO 特性在 Redis3.2版本中推出,这个功能可以将用户给定的地理位置(经度和纬度) 信息储存起来,并对这些信息进行操作。 (附近的人)

Redis到底是多线程还是单线程?

在redis 里所有的版本里 内存处理数据都是单线程

网络io 接入这一方面 redis6 之前是bio的 也就是单线程

后来 redis6 之后改了 改成nio 也就是多线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值