东莞企业网站建设价格,iis wordpress 500错误,青岛做网站皆赴青岛博采网络,电子商务网站开发与设计项目管理redis官网
微软写的windows下的redis 我们下载第一个
额案后基本一路默认就行了
安装后#xff0c;服务自动启动#xff0c;以后也不用自动启动。 出现这个表示我们连接上了。 redis命令参考链接
String
字符串结构
struct sdshdr{//记录buf数组中已使用字节的数量int …redis官网
微软写的windows下的redis 我们下载第一个
额案后基本一路默认就行了
安装后服务自动启动以后也不用自动启动。 出现这个表示我们连接上了。 redis命令参考链接
String
字符串结构
struct sdshdr{//记录buf数组中已使用字节的数量int len;//记录buf数组中未使用的数量int free;//字节数组用于保存字符串char buf[];
}
常见操作
127.0.0.1:6379 set hello world
OK
127.0.0.1:6379 get hello
world
127.0.0.1:6379 del hello
(integer) 1
127.0.0.1:6379 get hello
(nil)
127.0.0.1:6379
应用场景
String是最常用的一种数据类型普通的key/value存储都可以归为此类value其实不仅是String也可以是数字比如想知道什么时候封锁一个IP地址访问超过几次。INCRBY命令让这些变得很容易通过原子递增保持计数。
LIST
数据结构
typedef struct listNode{//前置节点struct listNode *prev;//后置节点struct listNode *next;//节点的值struct value;
}
常见操作 lpush list-key item
(integer) 1lpush list-key item2
(integer) 2rpush list-key item3
(integer) 3rpush list-key item
(integer) 4lrange list-key 0 -1
1) item2
2) item
3) item3
4) itemlindex list-key 2
item3lpop list-key
item2lrange list-key 0 -1
1) item
2) item3
3) item
应用场景
Redis list的应用场景非常多也是Redis最重要的数据结构之一。 我们可以轻松地实现最新消息排行等功能。 Lists的另一个应用就是消息队列可以利用Lists的PUSH操作将任务存在Lists中然后工作线程再用POP操作将任务取出进行执行。
HASH
数据结构
dictht是一个散列表结构使用拉链法保存哈希冲突的dictEntry。
typedef struct dictht{//哈希表数组dictEntry **table;//哈希表大小unsigned long size;//哈希表大小掩码用于计算索引值unsigned long sizemask;//该哈希表已有节点的数量unsigned long used;
}typedef struct dictEntry{//键void *key;//值union{void *val;uint64_tu64;int64_ts64;}struct dictEntry *next;
}
Redis的字典dict中包含两个哈希表dictht这是为了方便进行rehash操作。在扩容时将其中一个dictht上的键值对rehash到另一个dictht上面完成之后释放空间并交换两个dictht的角色。
typedef struct dict {dictType *type;void *privdata;dictht ht[2];long rehashidx; /* rehashing not in progress if rehashidx -1 */unsigned long iterators; /* number of iterators currently running */
} dict;
rehash操作并不是一次性完成、而是采用渐进式方式目的是为了避免一次性执行过多的rehash操作给服务器带来负担。
渐进式rehash通过记录dict的rehashidx完成它从0开始然后没执行一次rehash例如在一次 rehash 中要把 dict[0] rehash 到 dict[1]这一次会把 dict[0] 上 table[rehashidx] 的键值对 rehash 到 dict[1] 上dict[0] 的 table[rehashidx] 指向 null并令 rehashidx。
在 rehash 期间每次对字典执行添加、删除、查找或者更新操作时都会执行一次渐进式 rehash。
采用渐进式rehash会导致字典中的数据分散在两个dictht中因此对字典的操作也会在两个哈希表上进行。 例如查找时先从ht[0]查找没有再查找ht[1]添加时直接添加到ht[1]中。
常见操作 hset hash-key sub-key1 value1
(integer) 1hset hash-key sub-key2 value2
(integer) 1hset hash-key sub-key1 value1
(integer) 0hgetall hash-key
1) sub-key1
2) value1
3) sub-key2
4) value2hdel hash-key sub-key2
(integer) 1hdel hash-key sub-key2
(integer) 0hget hash-key sub-key1
value1hgetall hash-key
1) sub-key1
2) value1
SET
常见操作 sadd set-key item
(integer) 1sadd set-key item2
(integer) 1sadd set-key item3
(integer) 1sadd set-key item
(integer) 0smembers set-key
1) item2
2) item
3) item3sismember set-key item4
(integer) 0sismember set-key item
(integer) 1srem set-key item
(integer) 1srem set-key item
(integer) 0smembers set-key
1) item2
2) item3
应用场景
Redis为集合提供了求交集、并集、差集等操作故可以用来求共同好友等操作。
ZSET
数据结构
typedef struct zskiplistNode{//后退指针struct zskiplistNode *backward;//分值double score;//成员对象robj *obj;//层struct zskiplistLever{//前进指针struct zskiplistNode *forward;//跨度unsigned int span;}lever[];}typedef struct zskiplist{//表头节点跟表尾结点struct zskiplistNode *header, *tail;//表中节点的数量unsigned long length;//表中层数最大的节点的层数int lever;}
跳跃表基于多指针有序链实现可以看作多个有序链表。
与红黑树等平衡树相比跳跃表具有以下优点
插入速度非常快速因为不需要进行旋转等操作来维持平衡性。更容易实现。支持无锁操作。
常见操作 zadd zset-key 728 member1
(integer) 1zadd zset-key 982 member0
(integer) 1zadd zset-key 982 member0
(integer) 0zrange zset-key 0 -1
1) member1
2) member0zrange zset-key 0 -1 withscores
1) member1
2) 728
3) member0
4) 982zrangebyscore zset-key 0 800 withscores
1) member1
2) 728zrem zset-key member1
(integer) 1zrem zset-key member1
(integer) 0zrange zset-key 0 -1 withscores
1) member0
2) 982
应用场景
以某个条件为权重比如按顶的次数排序 ZREVRANGE命令可以用来按照得分来获取前100名的用户ZRANK可以用来获取用户排名非常直接而且操作容易。 Redis sorted set的使用场景与set类似区别是set不是自动有序的而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序并且是插入有序的即自动排序。